使用ant脚本进行多次重命名

时间:2011-03-07 13:27:34

标签: ant

让我解释一下这个场景:

D:\project\src\one.txt
D:\project\src\two.txt
D:\project\src\three.txt
D:\project\src\four.txt

上述文件应复制为:

D:\project\dst\one.xls
D:\project\dst\two.xls
D:\project\dst\three.xls
D:\project\dst\four.xls

我需要在不使用mapper和移动任务的情况下更改扩展名。我需要使用内置fte:filecopy函数的for循环重命名。这可能吗???

3 个答案:

答案 0 :(得分:6)

对于到这里没有影响OP的负面要求的人来说,更简单的答案是使用映射器。

<project default="move_files">
  <target name="move_files">
    <copy todir="dst">
      <fileset dir="src">
        <include name="*.txt"/>
      </fileset>
      <globmapper from="*.txt" to="*.xls"/>
    </copy>
  </target>
</project>

答案 1 :(得分:1)

这对我有用:

<?xml version="1.0"?>
<project name="so-copy-rename" default="build2">

    <property name="ant-contrib-jar" value="${user.home}/.ant/lib/ant-contrib-1.0b3.jar"/>

    <target name="setup" unless="ant-contrib.present">
        <echo>Getting ant-contrib</echo>
        <mkdir dir="${user.home}/.ant/lib"/>
        <!--
            Note: change this to a locally hosted maven repository manager such as nexus http://nexus.sonatype.org/
        -->
        <get dest="${ant-contrib-jar}"
             src="http://repo1.maven.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar"/>  
    </target>

    <target name="taskdefs">
        <taskdef resource="net/sf/antcontrib/antlib.xml">
            <classpath>
                <pathelement location="${ant-contrib-jar}"/>
            </classpath>
        </taskdef>
    </target>

    <target name="build" depends="taskdefs">

        <property name="srcdir" value="src"/>
        <property name="targetdir" value="target"/>
        <property name="files" value="file1,file2,file3,file4"/>

        <mkdir dir="${targetdir}"/>

        <foreach list="${files}" target="copy-rename" param="srcfile" trim="true">

            <param name="srcdir" value="${srcdir}" />
            <param name="targetdir" value="${targetdir}" />

        </foreach>

    </target>

    <target name="copy-rename">

        <var name="src-suffix" value="txt"/>
        <var name="tgt-suffix" value="xls"/>

        <copy file="${srcdir}/${srcfile}.${src-suffix}" tofile="${targetdir}/${srcfile}.${tgt-suffix}" />

    </target>

<target name="build2" depends="taskdefs">

    <property name="srcdir" value="src"/>
    <property name="targetdir" value="target"/>

    <mkdir dir="${targetdir}"/>

    <foreach target="copy-rename2" param="srcfile">
        <path id="srcfilepath">
            <fileset dir="${srcdir}" casesensitive="yes">
                <include name="*.txt"/>
            </fileset>
        </path>

        <param name="targetdir" value="${targetdir}" />
    </foreach>


</target>

<target name="copy-rename2">

    <var name="basefile" value="" unset="true"/>
    <basename property="basefile" file="${srcfile}" suffix=".txt"/>

    <var name="tgt-suffix" value="xls"/>

    <copy file="${srcfile}" tofile="${targetdir}/${basefile}.${tgt-suffix}" />

</target>

</project>

答案 2 :(得分:0)

你可以用其他方式对其进行切片并在fte:filecopy命令中执行重命名吗?查看the IBM documentation,您可以使用presrcpostdst等在复制之前或之后指定要在源代理或目标代理执行的任务。此task可以是一个重命名的Ant任务吗?