2010-01-27 13 views
17

我有一些文件:轉換一個Ant文件集到多個應用ARGS

dir/foo.txt 
dir/bar.txt 
dir/foobar.txt 

在Ant apply任務,我想通過文件的列表作爲參數:

<target name="atask"> 
    <apply executable="${cmd}" parallel="false" verbose="true"> 
     <arg value="-in"/> 
     <srcfile/> 
     <arg value="dir/foo.txt"/> 
     <arg value="dir/bar.txt"/> 
     <arg value="dir/foobar.txt"/> 

     <fileset dir="${list.dir}" includes="*.list"/> 
    </apply> 
</target> 

這工作正常,但如果我想選擇的文件列表中動態地使用文件集:

<fileset dir="dir" includes="*.txt"/> 

我怎樣才能轉換此文件集到arg元素 - 每個文件一個?喜歡的東西:

<arg> 
    <fileset dir="dir" includes="*.txt"/> 
</arg> 

,而不是

<arg value="dir/foo.txt"/> 
<arg value="dir/bar.txt"/> 
<arg value="dir/foobar.txt"/> 

(這個例子不工作,因爲ARG不支持文件集

回答

26

這裏的說明中使用的實例的pathconvert任務。

使用<arg line />將轉換後的路徑傳遞給可執行文件。

這假設您的*.txt文件的路徑中沒有空格。

<target name="atask"> 
    <fileset dir="dir" id="myTxts"> 
     <include name="*.txt" /> 
    </fileset> 
    <pathconvert property="cmdTxts" refid="myTxts" pathsep=" " /> 

    <apply executable="${cmd}" parallel="false" verbose="true"> 
     <arg value="-in" /> 
     <srcfile /> 
     <arg line="${cmdTxts}" /> 

     <fileset dir="${list.dir}" includes="*.list" /> 
    </apply> 
</target> 

如果你可能會遇到空間這應該做到:同上,但改變(有望明顯這線):

<pathconvert property="cmdTxts" refid="myTxts" pathsep="' '" /> 

 <arg line="'${cmdTxts}'"/> 
+0

我認爲這是不可能的混合,但它似乎是好的。這是一個很好的解決方法,它的工作原理(我沒有用名稱中的空格測試過這種情況)。 – Jmini 2010-01-28 17:47:52

+0

經過測試併爲我工作。 – ViToni 2015-09-04 19:51:12

相關問題