【问题标题】:In Windows batch loop, how to wait for spawned processes to complete before continuing在 Windows 批处理循环中,如何等待生成的进程完成后再继续
【发布时间】:2017-12-05 15:32:01
【问题描述】:

我想在批处理文件的循环中触发多个命令,如下所示:

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。您可以删除它们,一切都应该按预期工作。批处理脚本逐行解释。直到上一行完成后才会执行下一行。
  • 你是说在前一个循环完成之前不会发生下一个循环迭代?

标签: windows batch-file cmd parallel-processing wait


【解决方案1】:

start /wait 不是“全局”的,它只是等待启动的进程完成(也许......取决于应用程序的编程方式)。您需要的(并行启动多个进程并等到最后一个进程完成)可以用不同的方法完成:给所有进程一个定义的标题并观察它们:

@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

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

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2013-04-25
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2021-05-06
    相关资源
    最近更新 更多