条件<exec>基于<copy>

时间:2017-11-30 15:34:12

标签: nant

在我们基于Web的应用程序的nant构建脚本中,我们<copy>一组文件到目标目录,然后通过<exec>对它们运行aspnet_compiler。

<copy>只复制已更改的文件,但是这里无法将此信息传递给<exec>,并且我希望避免在没有实际更改时运行aspnet_compiler。

我试图找到的选项是:<copy>在复制任何文件时设置属性,然后可以使用<if>进行检查;或者能够在副本之前创建文件并执行<if test="any-file-newer-than(targetdir, timestampfile)">之类的操作。更好的是,如果<copy>可以返回一个复制文件列表,然后我可以迭代以避免必须处理整个树,但我认为这可能会有点过分。

到目前为止,我已经画了一个空白:如果不编写自定义扩展程序,我正在寻找什么?

1 个答案:

答案 0 :(得分:0)

为什么不简单地用robocopy替换复制任务? (你在Windows上,对吧?)

Robocopy在不同的成功复制情况下返回不同的退出代码: https://ss64.com/nt/robocopy-exit.html

例如:

  • 0 - 好的,没有复制
  • 1 - 好的,复制的东西

你可以这样做:

&#13;
&#13;
<exec program="robocopy.exe" commandline="${SourceDir} ${DestDir}" failonerror="false" resultproperty="ExitCode" />
<fail unless="${ExitCode &lt; 8}" message="Failed to copy"/> <!-- Anything between 0..7 is OK for robocopy -->
<exec unless="${ExitCode == 0}" ...
&#13;
&#13;
&#13;