2010-01-27 5 views
17

Ich habe einige Dateien:Konvertieren ein Ant fileset auf mehrere Argumente gelten

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

In einer Ant apply Aufgabe, möchte ich die Liste der Dateien, die als Argumente zu übergeben:

<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> 

Dies funktioniert gut was aber, wenn ich die Liste der Dateien dynamisch auswählen möchten, mit einem fileset:

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

Wie kann ich diese fileset konvertieren zu arg Elemente - eins pro Datei? Etwas wie:

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

statt

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

(Dieses Beispiel funktioniert nicht, weil arg nicht fileset unterstützt)

Antwort

26

Hier ist ein Beispiel für die Verwendung darstellt der pathconvert Aufgabe.

Der konvertierte Pfad wird unter Verwendung von <arg line /> an die ausführbare Datei übergeben.

Dies setzt keine Leerzeichen in den Pfaden Ihrer *.txt Dateien voraus.

<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> 

Wenn Sie Leerzeichen auftreten können dies tun sollten: wie oben, aber ändern (hoffentlich klar, welche Linien) zu:

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

und

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

Ich dachte, es war nicht möglich, mix und aber es scheint in Ordnung zu sein. Dies ist eine nette Abhilfe und es funktioniert (Ich habe den Fall nicht mit Leerzeichen in den Namen getestet). – Jmini

+0

Getestet und funktioniert für mich. – ViToni

Verwandte Themen