Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/jquery-mobile/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant 蚂蚁嵌套循环_Ant_Copy_Ant Contrib - Fatal编程技术网

Ant 蚂蚁嵌套循环

Ant 蚂蚁嵌套循环,ant,copy,ant-contrib,Ant,Copy,Ant Contrib,我有两个txt文件:File1.txt–包含src dir的列表;和File2.txt–包含dest dir的列表。我需要使用从src dir到dest dir的循环进行复制 File1.txt(SVN结构) File2.txt(LINUX结构) 我需要将abcBIN文件目录复制到apps/xxx/yyy/bin/abc等等。一对一映射 <project xmlns:ac="antlib:net.sf.antcontrib"> <taskdef resource="net/s

我有两个txt文件:File1.txt–包含src dir的列表;和File2.txt–包含dest dir的列表。我需要使用从src dir到dest dir的循环进行复制

File1.txt(SVN结构)

File2.txt(LINUX结构)

我需要将abcBIN文件目录复制到apps/xxx/yyy/bin/abc等等。一对一映射

<project xmlns:ac="antlib:net.sf.antcontrib">

<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
   <classpath>
      <pathelement location="path-to-ant-contrib.jar"/>
   </classpath>
</taskdef>

<loadfile property="file1" srcfile="File1.txt"/> 
<loadfile property="file2" srcfile="File2.txt"/>

<ac:for param="i" list="${file1}">
    <ac:for param="j" list="${file2}"> 
        <sequential>
           <echo>@{i}@{j}</echo>
           <echo>copying....</echo>

           <property name="src.dir" value="/home/name/svn_repo/dir" />
           <property name="dest.dir" value="/home/name/mapp" /> 
           <copy todir="${dest.dir}/@{j}">
              <fileset dir="${src.dir}/@{i}"> 
              </fileset>
           </copy>     
        </sequential>
     </ac:for>
</ac:for>

</project>
我不能使用unixshell或Perl。它必须在Ant中完成


如果您对Ant中的嵌套循环有更好的了解,请告诉我。

@PulakAgrawal:我使用冒号作为行分隔符将两个文本文件合并为一个,魔法开始了:)

e、 g.src路径:dest路径

     <loadfile property="allfiles" srcFile="mapping"/>

      <ac:for list="${allfiles}" param="line" delimiter="${line.separator}">

     <ac:sequential>

            <ac:propertyregex property="from" input="@{line}" regexp="(.*):(.*)" select="\1" override="true"/>

            <ac:propertyregex property="to" input="@{line}" regexp="(.*):(.*)" select="\2" override="true"/>

            <echo>Copying dir ${from} to ${to} ...</echo>

            <property name="src.dir" value="." /> <property name="dest.dir" value="." />

            <copy todir="${dest.dir}/${to}">     <fileset dir="${src.dir}/${from}">  </fileset> </copy>

     </ac:sequential>

     </ac:for>

正在将目录${from}复制到${to}。。。

我需要复制(file.txt dir到file2.txt dir),例如abcBIN files dir到apps/xxx/yyy/bin/abc等等。一对一映射。如果你真的想这样做,你需要把第二个
放在
里面,而且,你还需要把
..
部分放在第二个
里面。如果我使用你提到的逻辑,那么酷吧。它不适用于一对一映射。e、 g.从src接一行,然后从dest接一行dir@ShwetaChandrakar您可以发布您的解决方案,以便其他人可以从中受益。@ShwetaChandrakar我需要知道这个解决方案。。感谢感谢;您可能希望将此标记为答案,以便其他人可以从中受益。尽管此操作有效。。我称之为黑客@失败了,艾德夫,怎么了?你能想出一个更干净的解决办法吗?@PulakAgrawal:好吧,这不是黑客攻击。这是我在ANT中使用的内置命令。实际的文本文件是单个文件。我确实是为了方便才把它分开的。然后我想到了使用原始版本。@PulakAgrawal:如果你仍然认为它没有用,那么我很乐意将它从论坛中删除。这就是我以前没有发布答案的原因。你让我这么做的时候我就这么做了。我是新来的蚂蚁。我可能没有给你最好的。:)请不要拿走任何东西。这是一个有效的答案,因为它确实起作用。这将对许多人有用。至少我把它放在了我最喜欢的清单上。根据我的经验,我可以告诉你,你已经是前10%的ANT开发者了,所以不用担心。如果你不喜欢“hack”这个词,好吧,但我仍然认为它不是一个干净的解决方案,因为我们正在从操作系统进行处理,然后到一个文件(其中包含LS???的输出),然后返回操作系统进行复制。如果我能想出一个更干净的,我会回答自己:)
<project xmlns:ac="antlib:net.sf.antcontrib">

<taskdef resource="net/sf/antcontrib/antcontrib.properties"> 
   <classpath>
      <pathelement location="path-to-ant-contrib.jar"/>
   </classpath>
</taskdef>

<loadfile property="file1" srcfile="File1.txt"/> 
<loadfile property="file2" srcfile="File2.txt"/>

<ac:for param="i" list="${file1}">
    <ac:for param="j" list="${file2}"> 
        <sequential>
           <echo>@{i}@{j}</echo>
           <echo>copying....</echo>

           <property name="src.dir" value="/home/name/svn_repo/dir" />
           <property name="dest.dir" value="/home/name/mapp" /> 
           <copy todir="${dest.dir}/@{j}">
              <fileset dir="${src.dir}/@{i}"> 
              </fileset>
           </copy>     
        </sequential>
     </ac:for>
</ac:for>

</project>
ac:for doesn't support the nested "for" element
     <loadfile property="allfiles" srcFile="mapping"/>

      <ac:for list="${allfiles}" param="line" delimiter="${line.separator}">

     <ac:sequential>

            <ac:propertyregex property="from" input="@{line}" regexp="(.*):(.*)" select="\1" override="true"/>

            <ac:propertyregex property="to" input="@{line}" regexp="(.*):(.*)" select="\2" override="true"/>

            <echo>Copying dir ${from} to ${to} ...</echo>

            <property name="src.dir" value="." /> <property name="dest.dir" value="." />

            <copy todir="${dest.dir}/${to}">     <fileset dir="${src.dir}/${from}">  </fileset> </copy>

     </ac:sequential>

     </ac:for>