I have couple of .xml files in a folder.I want to loop on each .xml file.It is getting fine. I want to take only .xml file name without entire path. How can i achieve that.?
I am using the below piece of code to get the file name.
<target name="createApplicationDAA">
<for param="program">
<path>
<fileset dir="${soaProjectName}/Composites" includes="**/*.xml"/>
</path>
<sequential>
<propertyregex override="yes" property="file" input="@{program}" regexp=".*/([^\.]*)\.xml" replace="\1"/>
<echo>@{program}</echo>
</sequential>
</for>
</target>
the folder name is C:/abc/bcd/cde first.xml,second.xml,third.xml,fourth.xml is the .xml files in cde folder. when i execute the above code it is getting entire path like C:/abc/bcd/cde/first.xml ..etc I want to get only first for first.xml and second for second.xml. please help me out to achieve only file name.
EDIT after further investigation (see comments)
No need for regex when using basename task. Properties once set are immutable in vanilla ant, so when using basename task within for loop, the property FileName holds the value of the first file.
Therefore antcontrib var task with unset="true" has to be used :
<for param="program">
<path>
<fileset dir="C:\whatever" includes="**/*.xml"/>
</path>
<sequential>
<var name="FileName" unset="true"/>
<basename property="FileName" file="@{program}" suffix=".xml"/>
<echo>${FileName}</echo>
</sequential>
</for>
<echo>@{program}</echo>
<echo>${file}</echo>
insteadmeans something like :
<for param="program">
<path>
<fileset dir="C:\whatever" includes="**/*.xml"/>
</path>
<sequential>
<propertyregex override="yes" property="file" input="@{program}" regexp=".:\\.+\\(\w+).+" replace="\1"/>
<echo>${file}</echo>
</sequential>
</for>