【问题标题】:ant - Need to get only file name without extension and entire pathant - 只需要获取没有扩展名的文件名和整个路径
【发布时间】:2023-03-10 00:40:02
【问题描述】:

我在一个文件夹中有几个 .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 的第二个。 请帮我实现只有文件名。

【问题讨论】:

标签: ant ant-contrib


【解决方案1】:

编辑经过进一步调查(见 cmets)

使用 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>
  1. 正则表达式在我的 windowsbox 上不适合我
  2. 您在使用 &lt;echo&gt;@{program}&lt;/echo&gt; 时正在回显原始文件名
    请改用&lt;echo&gt;${file}&lt;/echo&gt;

表示类似:

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

【讨论】:

  • 嗨 Rebse,感谢您的支持。效果很好,我的基本名称任务也一样。再次感谢您
  • basename 任务的文件扩展名为 .xml,你写的是你想要的 first 和 second 而不是 first.xml 和 second.xml !?
  • 我们可以使用 basename 任务的属性后缀来避免扩展名。所以我使用了与下面相同的方法。
  • 当心 - 属性一旦设置在 vanilla ant 中是不可变的,因此在 for 循环中使用 basename 任务时,属性 FileName 保存第一个文件的值,而 antcontrib 的 propertyregex 任务允许覆盖现有的属性值通过覆盖属性设置为“是”
  • 忘记了 antcontrib 的 var 任务 - 已经有一段时间了 => 你可以在 for 循环中使用 basename 任务,但你必须把这行放在前面 => ,还要注意你的评论中的语法错误文件 =“${program}” => 在 for 循环中使用 @{param} 而不是 ${param}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多