如何在Ant中创建映射器指定的目录

如何在Ant中创建映射器指定的目录,ant,build-process,directory-structure,Ant,Build Process,Directory Structure,给定一个文件集 <fileset id="myFiles" dir="."> <include name="**/*.file"/> </fileset> 如何在集合中的每个文件上创建一个子目录,以文件名命名,但不带扩展名 例如,给定folderA/X.file和folderA/folderB/Y.file文件,我想创建目录folderA/X和folderA/folderB/Y,以便任务在文件列表上迭代。但是我在Ant中没有遇到任何子字符串类型的

给定一个文件集

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

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


例如,给定folderA/X.file和folderA/folderB/Y.file文件,我想创建目录folderA/X和folderA/folderB/Y,以便任务在文件列表上迭代。但是我在Ant中没有遇到任何子字符串类型的实用程序,您可以使用它剥离扩展并创建目录。一定要搜索这个实用程序,如果它不在那里,那么你需要实现一个Ant任务来完成它。

很抱歉回答我自己的问题。除非有人知道其他情况,否则开箱即用的ANT似乎无法创建与文件集中的条目相关的目录(例如使用mkdir)

Ant Contrib包含有用的for循环任务,正如Bhushan所建议的,它可能执行此类任务

最后,我编写了一个由ANT任务调用的批处理文件(apply任务可以迭代文件集)


批处理文件执行此操作的位置: mkdir%~dp1%~n1


(为什么在ANT中做一些简单的事情如此困难?我遗漏了什么吗?

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>

这将在目标目录中创建临时文件(如果目录不存在,则创建目录),然后删除临时文件,留下所需的目录

  <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>