我在一个文件夹中有几个.xml文件。我想循环每个.xml文件。它变得很好。 我想只使用没有完整路径的.xml文件名。 我怎样才能做到这一点。?
我使用下面的代码来获取文件名。
<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>
文件夹名称为C:/ abc / bcd / cde first.xml,second.xml,third.xml,fourth.xml是cde文件夹中的.xml文件。 当我执行上面的代码时,它获得了像C:/abc/bcd/cde/first.xml ..etc这样的完整路径 我想首先获取first.xml,第二个获取second.xml。 请帮我解决文件名。
答案 0 :(得分:8)
编辑(见评论)
使用basename任务时不需要正则表达式。一旦设置的属性在vanilla ant中是不可变的,所以当在for循环中使用basename任务时,属性FileName保存第一个文件的值。
因此必须使用带有unset =“true”的antcontrib var任务:
<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>
代替意思是:
<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>