使用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
所以现在我需要使用这些来创建文件夹名称,并将文件复制到适当的文件夹中。
我看到了这篇关于使用regex和mapper的文章,然而这似乎是一个更好的方法——但是我无法复制那里所描述的。
您可以使用内置(自Java 1.6.0_06起)javascript引擎的嵌套scriptmapper:
<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>