Ant:读取文件名,根据名称创建文件夹,将文件移动到文件夹中

时间:2014-07-08 23:41:11

标签: regex file-io ant

使用Ant任务,我想读取目录中的所有文件名,并将每个文件复制到一个文件夹中,文件夹名称与文件相同但没有扩展名。

从:

开始
converted/aa_aa.dita
converted/bb_bb.dita
converted/cc_cc.dita

结束于:

aa_aa/aa_aa.dita
bb_bb/bb_bb.dita
cc_cc/cc_cc.dita

等等。

到目前为止,我已经得到了这个,它用路径读取文件名并将它们放在.txt文件中:

<target name="move_dita_to_folder">
  <pathconvert pathsep=","
    property="my.files">
   <path>
     <fileset dir=".">
       <include name="*.dita"/>
     </fileset>
   </path>
 </pathconvert>

<echo file="my.files.txt" append="true">
my.files=${my.files}</echo>

这使得包含完整路径中包含的文件名的文件以逗号分隔。

更新

现在我从txt文件中提取文件名并重写txt文件,将每个文件放在一个新行上:

   <replaceregexp byline="false" flags="gis">
     <regexp pattern="(C:)(.*?)converted\\(.*?).dita"/>
     <substitution expression="${line.separator}\3"/>
     <fileset dir=".">
     <include name="**/*.txt"/>
     </fileset>
   </replaceregexp> 

结果是:

    my files=
aa_aa
bb_bb
cc_cc

所以现在我需要使用它们来创建文件夹名称,并将文件复制到适当的文件夹中。

我看到 this post关于使用正则表达式和映射器,但这似乎是一种更好的方式 - 但我无法复制那里所描述的内容。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用内置(自Java 1.6.0_06)javascript引擎的嵌套脚本映射器:

<copy todir="..." verbose="true">
 <fileset dir="..." includes="**/*.dita"/>
 <scriptmapper language="javascript">
  self.addMappedName(source.replace(source.split('.')[0], source.split('.')[0] + "/" + source.split('.')[0]));
 </scriptmapper>
</copy>