【问题标题】:How to run 2 or more batch files in parallel, from an ant script?如何从 ant 脚本并行运行 2 个或多个批处理文件?
【发布时间】:2016-05-26 08:00:30
【问题描述】:
我的意图是使用 ant 脚本并行运行 2 个批处理文件。
操作系统:Windows 7
我试过了,但没有用。
<project name="RBS" basedir=".">
<!--<property name="buildC" value="${basedire}\build-C" /> -->
<target name="start batch parallely">
<parallel >
<exec dir="RBS" executable="cmd" os="Windows 7">
<arg line="/c run_parallel.bat"/>
</exec>
<exec dir="RBS\Retail_R6" executable="cmd" os="Windows 7">
<arg line="/c RetailAutomation_R7.bat"/>
</exec>
</parallel>
</target>
</project>
有人可以帮忙吗?
【问题讨论】:
标签:
batch-file
command-line
ant
cmd
parallel-processing
【解决方案1】:
"请注意,.bat 文件通常不能直接执行。通常需要使用 /c 开关执行命令 shell 可执行 cmd。" - https://ant.apache.org/manual/Tasks/exec.html
<exec executable="cmd">
<arg value="/c"/>
<arg value="ant.bat"/>
<arg value="-p"/>
</exec>
此外,<exec></exec> 基本上包装到 Windows CreateProcess() API,它运行 bat 或任何文件扩展名作为它自己的进程,这意味着它将并行运行。不是积极的,但我相信你的<parallel></parallel> 只会产生异步启动 .bats 的效果。
此外,我还将跟进 msdn 的 CreateProcess() API,以确保您在 Windows 上正确使用 <exec></exec>。
也更改了您的代码
<project name="RBS" basedir=".">
<!--<property name="buildC" value="${basedire}\build-C" /> -->
<target name="start batch parallely">
<parallel >
<exec executable="cmd">
<arg value="/c"/>
<arg value="RBS/run_parallel.bat"/>
</exec>
<exec executable="cmd">
<arg value="/c"/>
<arg value="RBS/Retail_R6/RetailAutomation_R7.bat"/>
</exec>
</parallel>
</target>
</project>
.bats 也必须位于工作目录的底部。如果不更改第二个<arg value>,则在文件名前添加相对路径。也许应该这样做?