2010-02-24 71 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>