gpt4 book ai didi

ant - 遍历 Ant 目录中的所有文件名

转载 作者:行者123 更新时间:2023-12-04 21:20:01 27 4
gpt4 key购买 nike

我需要遍历目录中的所有文件。但我只需要每个文件的名称,而不是绝对路径。这是我使用 ant-contrib 的尝试:

<target name="store">
<for param="file">
<path>
<fileset dir="." includes="*.xqm"/>
</path>
<sequential>
<basename file="@{file}" property="name" />
<echo message="@{file}, ${name}"/>
</sequential>
</for>
</target>

问题是 ${name} 表达式只计算一次。有没有其他方法可以解决这个问题?

最佳答案

来自 ant manual basename : “当这个任务执行时,它会将指定的属性设置为指定文件的最后一个路径元素的值”
属性一旦设置在 vanilla ant 中是不可变的,因此当在 for 循环中使用 basename 任务时,属性“name”保存第一个文件的值。因此必须使用 unset="true"的 antcontrib var 任务:

<target name="store">
<for param="file">
<path>
<fileset dir="." includes="*.xqm"/>
</path>
<sequential>
<var name="name" unset="true"/>
<basename file="@{file}" property="name" />
<echo message="@{file}, ${name}"/>
</sequential>
</for>
</target>

或者使用 local task ,当使用 Ant 1.8.x 或更高版本时:

<target name="store">
<for param="file">
<path>
<fileset dir="." includes="*.xqm"/>
</path>
<sequential>
<local name="name"/>
<basename file="@{file}" property="name" />
<echo message="@{file}, ${name}"/>
</sequential>
</for>
</target>

最后你可以使用Ant Flaka而不是 antcontrib :

<project xmlns:fl="antlib:it.haefelinger.flaka">
<fl:install-property-handler />

<fileset dir="." includes="*.xqm" id="foobar"/>

<!-- create real file objects and access their properties -->
<fl:for var="f" in="split('${toString:foobar}', ';')">
<echo>
#{ format('filename %s, last modified %tD, size %s bytes', f.tofile.toabs,f.tofile.mtime,f.tofile.size) }
</echo>
</fl:for>

<!-- simple echoing the basename -->
<fl:for var="f" in="split('${toString:foobar}', ';')">
<echo>#{f}</echo>
</fl:for>

</project>

关于ant - 遍历 Ant 目录中的所有文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com