5

フォルダにいくつかの .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 の場合は first.xml のみ、second.xml の場合は second のみを取得します。ファイル名のみを達成するのを手伝ってください。

4

1 に答える 1

9

さらに調査した後に編集します(コメントを参照)

basename タスクを使用する場合、正規表現は必要ありません。一度設定されたプロパティはバニラ 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. <echo>@{program}</echo>
    use<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>
于 2013-05-21T07:54:39.763 に答える