在 Windows 批处理循环中,如何在继续之前等待生成的进程完成
In Windows batch loop, how to wait for spawned processes to complete before continuing
我想像这样在批处理文件中的一个循环中触发多个命令:
for /l %%x in (20170101,1,20170105) do (
start /wait C:\Progra~1\Amazon\AWSCLI\aws s3 cp s3://bucket1/%%x
s3://bucket2/%%x --recursive
)
#do something else here only when ALL the above commands complete
Start /wait 是否会在循环后移动到下一行之前等待所有命令完成?
start /wait
不是 "global",它只是等待启动的进程完成(也许...取决于应用程序的编程方式)。您需要的(并行启动多个进程并等待最后一个进程完成)可以使用不同的方法来完成:为所有进程定义一个标题并观察它们:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,10) do (
start "OneOfMyProcesses" timeout !random:~-1!
)
echo waiting
:loop
timeout 1 >nul
tasklist /v |find "OneOfMyProcesses" >nul && goto :loop
echo all of them are finished
注意:如上所述,这可能适用于也可能不适用于您的应用程序
我想像这样在批处理文件中的一个循环中触发多个命令:
for /l %%x in (20170101,1,20170105) do (
start /wait C:\Progra~1\Amazon\AWSCLI\aws s3 cp s3://bucket1/%%x
s3://bucket2/%%x --recursive
)
#do something else here only when ALL the above commands complete
Start /wait 是否会在循环后移动到下一行之前等待所有命令完成?
start /wait
不是 "global",它只是等待启动的进程完成(也许...取决于应用程序的编程方式)。您需要的(并行启动多个进程并等待最后一个进程完成)可以使用不同的方法来完成:为所有进程定义一个标题并观察它们:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,10) do (
start "OneOfMyProcesses" timeout !random:~-1!
)
echo waiting
:loop
timeout 1 >nul
tasklist /v |find "OneOfMyProcesses" >nul && goto :loop
echo all of them are finished
注意:如上所述,这可能适用于也可能不适用于您的应用程序