2

给定一个文件集

<fileset id="myFiles" dir=".">
    <include name="**/*.file"/>
</fileset>

如何在集合中的每个文件上创建一个子目录,以不带扩展名的文件名命名?

例如,给定文件 folderA/X.file 和 folderA/folderB/Y.file,我想创建目录 folderA/X 和 folderA/folderB/Y

4

3 回答 3

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>

这会在目标目录中创建临时文件(如果不存在则创建目录),然后删除临时文件留下您想要的目录。

于 2009-06-22T16:04:51.450 回答
1

您将使用 for task 来迭代您的文件列表。但是我在 Ant 中没有遇到任何子字符串类型的实用程序,您可以使用它来剥离扩展并创建目录。一定要搜索这个实用程序,如果它不存在,那么你需要实现一个 Ant 任务来做到这一点。

于 2009-02-11T12:25:23.317 回答
0

很抱歉回答我自己的问题。除非有人知道,否则开箱即用的 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 中做一些简单的事情这么难?我错过了什么吗?)

于 2009-02-11T15:20:50.663 回答