2013-05-21 2 views
3

폴더에 두 개의 .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/ first.xml, second.xml, third.xml, fourth.xml는 CDE 폴더에있는 .xml 파일입니다 CDE. 위의 코드를 실행하면 C : /abc/bcd/cde/first.xml과 같은 전체 경로가 생성됩니다. first.xml은 처음으로 가져오고 second.xml은 두 번째로 가져 가고 싶습니다. 파일 이름 만 제공하도록 도와주세요. 기본 이름 작업을 사용하는 경우

+0

대신 정규 표현식으로 사용할 수 ANT의 기본 이름 작업이 있습니다 : http://ant.apache.org/manual/Tasks/basename.html –

답변

7

편집 추가 조사 후 정규식에 대한

필요 없음을 (주석 참조). 한 번 설정 한 속성은 바닐라 ant에 불변하므로 for 루프 내에서 basename 작업을 사용할 때 FileName 속성은 첫 번째 파일의 값을 보유합니다.

<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>를 사용하는 경우 :
    그러므로 = 해제 "true"를 가진 antcontrib VAR 작업이 사용되어야한다

    0 :
    사용 <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> 
+0

안녕 Rebse, 당신의 support.It 주셔서 감사합니다 좋은 일을하고 나는 기본 이름 task와 동일한 것을 얻었다. 다시 한번 – Thiru

+0

basename 작업에는 여전히 파일 확장자 .xml이있다. 당신은 first.xml과 second.xml 대신에 first와 second를 써야한다고 썼다. – Rebse

+0

우리는 basename 작업을위한 확장자를 피하기 위해 접미사를 사용할 수 있습니다. – Thiru