在 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

注意:如上所述,这可能适用于也可能不适用于您的应用程序