完成多个同步批处理文件后,执行1个批处理文件

时间:2017-03-13 19:08:44

标签: python windows batch-file cmd nested

我已阅读以下帖子,发现他们似乎都没有回答我的问题How to call one batch file after anotherExecute batch file after another batch file completes

我试图通过Windows Server 2012 R2 Standard上的批处理文件运行一系列6个python脚本。我希望前5个脚本同时运行(Processing.bat),目前由五个子bat文件组成(North.bat,West.bat,South.bat,Central.bat,Northeast.bat)。一旦完成,它应该运行一个最终脚本,它与前5个(Merge.bat)的输出一起工作。

我已经尝试了几种呼叫和启动/等待的组合,似乎没有什么做得对。目前我的主要bat文件如下:

start /wait Processing.bat
start /wait Merge.bat

Processing.bat看起来像:

start North.bat
start South.bat
start NorthEast.bat
start West.bat
start Central.bat

IF %ERRORLEVEL% EQU 0 EXIT 

每个子球棒看起来像:

start /wait C:\Python27\ArcGIS10.4\python.exe E:\TestScript.py Central 

IF %ERRORLEVEL% EQU 0 EXIT

最后merge.bat看起来像:

start /wait C:\Python27\ArcGIS10.4\python.exe E:\MergeSDE.py

IF %ERRORLEVEL% EQU 0 EXIT

使用此设置,所有6个脚本将立即运行(而不是5个后跟1)。但是相应的命令提示符窗口将保持打开状态,直到每个脚本完成(7个窗口)。踢球者是如果我要将Processing.bat中的“start”更改为“start / wait”,它将逐个运行(前5个中的哪个,我不想要),然后使用“start / wait” “在主要批次中,所有子批次立即运行。

2 个答案:

答案 0 :(得分:1)

正如批处理文件一样,您可以编辑它们。

在第一次创建标志文件时设置:

break>"%temp%\north"

关于第二个:

break>"%temp%\south"

等等。

在merge.bat set的开头(如果west.bat是最后执行的文件):

:wait_again
:: sleep 5 seconds
ping 127.0.0.1 -n 6 > nul
if not exist "%temp%\south" if not exist "%temp%\north" ... (

   goto :wait_again
)
应该使用start命令再次启动

merge.bat。还应提前删除标志文件。

答案 1 :(得分:1)

这是解决此问题的最简单方法:

(
start North.bat
start South.bat
start NorthEast.bat
start West.bat
start Central.bat
) | set /P "="

call Merge.bat

How to wait all batch files to finish before exiting?的进一步详情。