2012-03-27 56 views
2

我需要掃描文件夾中的文件並將屬性設置爲Ant中的文件名,以便稍後使用它。 例如,Jenkins文件夾下有一個test123.tar。我需要使用test * .tar來匹配這個文件,然後將一個名爲「filename」的屬性設置爲test123.tar 是否可以這樣做? 非常感謝!如何獲取文件名並將其設置爲Ant中的屬性?

回答

0

文件集(搜索)和pathconvert的組合將有所幫助。

<project name="SuperRoot" default="demo" basedir="."> 
    <fileset id="afileset" dir="searchfolder" includes="**/test*.jar"/> 

    <target name="demo" > 
     <pathconvert property="result" refid="afileset" /> 
     <echo message="found : ${result}"/> 
     <basename property="foo.filename" file="${result}"/> 
     <echo message="found : ${foo.filename}"/> 
     </target> 
</project> 
4

你可以使用pathconvert的文件集轉換成文件列表,然後loadresourcefilterchain提取從列表中一個必需的值。

<project default="test"> 

    <target name="test"> 

     <!-- read your fileset into a property formatted as a list of lines --> 
     <pathconvert property="file.list" pathsep="${line.separator}"> 
      <map from="${basedir}${file.separator}" to=""/> 
      <fileset dir="${basedir}"> 
       <include name="test*.tar"/> 
      </fileset> 
     </pathconvert> 


     <!-- extract a single target file from the list --> 
     <loadresource property="file.name"> 
      <string value="${file.list}"/> 
      <filterchain> 
       <!-- add your own logic to deal with multiple matches --> 
       <headfilter lines="1"/> 
      </filterchain> 
     </loadresource> 

     <!-- print the result --> 
     <echo message="file.name: ${file.name}"/> 

    </target> 

</project> 

輸出:

$ ls test*.tar 
test012.tar test123.tar testabc.tar 
$ 
$ ant 
Buildfile: C:\tmp\ant\build.xml 

test: 
    [echo] file.name: test012.tar 

BUILD SUCCESSFUL 
Total time: 0 seconds 

詳細輸出:

$ ant -v 
test: 
[pathconvert] Set property file.list = test012.tar 
[pathconvert] test123.tar 
[pathconvert] testabc.tar 
[loadresource] loading test012.tar 
[loadresource] test123.tar 
[loadresource] testabc.tar into property file.name 
[loadresource] loaded 13 characters 
    [echo] file.name: test012.tar 

BUILD SUCCESSFUL 
Total time: 0 seconds 
相關問題