2010-02-24 33 views
4

我有一個NAnt任務「ship」將我當前的.sql腳本打包到構建中,然後使用遞增的int {######}命名構建並將其複製到構建文件夾。我想使用NAnt的foreach迭代文件夾中的文件,如何強制按字母順序迭代?

我有另一個執行這些構建腳本的NAnt任務。

他們必須按順序執行,但在我最後一次嘗試中,他們不是。我可以「強制」NAnt按字母順序工作嗎?

+0

做到這一點,你可以請包括更多的細節和代碼段。我試圖循環遍歷目錄中的文件,顯然這些文件按字母順序迭代。 – 2010-02-24 18:07:24

回答

4

失敗:

<fileset basedir="source\tsql\builds\" id="buildfiles"> 
    <include name="*.sql.template.sql" /> 
    <exclude name="*.sql" /> 
    <exclude name="*asSentTo*" /> 
</fileset> 
<foreach item="File" property"filename"> 
    <in refid="buildfiles"> 
    <echo message="${filename}" /> 
    </in> 
</foreach> 

PASS:

<foreach item="File" property="filename" in="source\tsql\builds"> 
    <do> 
    <if test="${string::ends-with(filename,'.sql.template.sql')}"> 
     <echo message="${filename}" /> 
    </if> 
    </do> 
</foreach> 
+1

Duncan格式化XML或代碼,您需要在每行之前添加至少4個空格。你有2.我編輯來格式化它。您也可以選擇文本並使用代碼塊圖標(圖標上的零和零)。你可以點擊編輯看看我做了什麼。 – 2010-03-18 20:07:49

+0

謝謝艾哈邁德! – Duncan 2010-03-26 15:36:47

1

爲了滿足我的好奇心我試圖用這個腳本來重現問題:

<?xml version="1.0"?> 
<project name="foreach.test" default="foreach.alpha"> 
    <target name="foreach.alpha"> 
    <foreach item="File" in="C:\foo" property="filename"> 
     <do> 
     <echo message="${filename}" /> 
     </do> 
    </foreach> 
    </target> 
</project> 

的文件名以字母順序打印出來。因此,傳統使用foreach似乎已經成爲解決問題的方法。

+0

你是如何對你的XML進行美化的? – Duncan 2010-03-18 19:49:06

1

這裏是你如何與一個文件集

<fileset id="mySet"> 
    <include name="*.sql" /> 
</fileset> 
<copy> 
    <fileset refid="mySet" /> 
</copy> 
<foreach item="File" property="filename"> 
    <in> 
    <items refid="mySet" /> 
    </in> 
    <do> 
    <echo message="Copied files: ${filename} to directory: ${Folder}." /> 
    </do> 
</foreach>