使用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关于使用正则表达式和映射器,但这似乎是一种更好的方式 - 但我无法复制那里所描述的内容。任何帮助表示赞赏。
答案 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>