给定一个文件集
<fileset id="myFiles" dir=".">
<include name="**/*.file"/>
</fileset>
如何在集合中的每个文件上创建一个子目录,以不带扩展名的文件名命名?
例如,给定文件 folderA/X.file 和 folderA/folderB/Y.file,我想创建目录 folderA/X 和 folderA/folderB/Y
给定一个文件集
<fileset id="myFiles" dir=".">
<include name="**/*.file"/>
</fileset>
如何在集合中的每个文件上创建一个子目录,以不带扩展名的文件名命名?
例如,给定文件 folderA/X.file 和 folderA/folderB/Y.file,我想创建目录 folderA/X 和 folderA/folderB/Y
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>
这会在目标目录中创建临时文件(如果不存在则创建目录),然后删除临时文件留下您想要的目录。
您将使用 for task 来迭代您的文件列表。但是我在 Ant 中没有遇到任何子字符串类型的实用程序,您可以使用它来剥离扩展并创建目录。一定要搜索这个实用程序,如果它不存在,那么你需要实现一个 Ant 任务来做到这一点。
很抱歉回答我自己的问题。除非有人知道,否则开箱即用的 ANT 似乎无法创建相对于文件集中条目的目录(例如使用 mkdir)。
正如 Bhushan 所建议的,Ant-Contrib 包含有用的循环任务,它可能执行此类任务。
有一些更好的事情要做,所以最后,我只写了一个由 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 中做一些简单的事情这么难?我错过了什么吗?)