2010-01-27 17 views
17

मैं कुछ फ़ाइलें:परिवर्तित कई करने के लिए एक चींटी फ़ाइलसेट आर्ग लागू

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

एक चींटी 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"/> 

(इस उदाहरण काम नहीं करता क्योंकि आर्ग फ़ाइलसेट समर्थन नहीं करता)

उत्तर

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

+0

परीक्षण और मेरे लिए काम करता है। – ViToni