给定文件集
<fileset id="myFiles" dir=".">
<include name="**/*.file"/>
</fileset>
如何在集合中的每个文件中创建一个子目录,以没有扩展名的文件名命名?
例如,给定文件folderA / X.file和folderA / folderB / Y.file,我想创建目录folderA / X和folderA / folderB / Y
答案 0 :(得分:3)
ant touch任务支持创建文件,父目录和文件名映射,因此可用于实现此目的:
<target name="mkdirs">
<touch mkdirs="true">
<fileset dir="the_dir"/>
<mapper type="glob" from="*.file" to="the_dir/*/.tmp" />
</touch>
<delete>
<fileset dir="the_dir" includes="**/.tmp"/>
</delete>
</target>
这将在目标目录中创建临时文件(如果不存在则创建目录),然后删除临时文件,留下您想要的目录。
答案 1 :(得分:1)
您将用于任务迭代文件列表。但我没有在Ant中遇到任何子字符串类型的实用程序,您可以使用它来剥离扩展并创建目录。搜索此实用程序,如果不存在,则需要执行Ant任务来执行此操作。
答案 2 :(得分:0)
很抱歉回答我自己的问题。除非有人知道,否则开箱即用的ANT似乎无法相对于文件集中的条目创建目录(例如使用mkdir)。
Ant-Contrib包含对循环任务有用,正如Bhushan建议的那样,它可能会执行这类任务。
有一些更好的东西要继续使用,所以最后,我只写了一个由ANT任务调用的批处理文件(应用任务可以迭代文件集)。
<apply executable="cmd" failonerror="1">
<arg value="/c"/>
<arg line="build\tools\makeRelDir.bat"/>
<fileset dir=".">
<include name="**/*.file"/>
</fileset>
</apply>
批处理文件执行此操作: mkdir%~dp1%~n1
(为什么在ANT中做一些简单的事情很难?我错过了什么吗?)