ant - 只需要获取没有扩展名和整个路径的文件名

Thi*_*iru 5 ant ant-contrib

我在一个文件夹中有几个.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>
Run Code Online (Sandbox Code Playgroud)

文件夹名称为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.请帮助我实现只有文件名.

Reb*_*bse 9

进一步调查后编辑(见评论)

使用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>
Run Code Online (Sandbox Code Playgroud)
  1. 正则表达式在我的windowsbox上对我不起作用
  2. 你使用的时候呼应原来的文件名<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>
Run Code Online (Sandbox Code Playgroud)