【发布时间】:2013-07-27 23:48:44
【问题描述】:
我有一堆批处理文件,每个批处理文件启动一堆可执行文件以同时运行。每个批处理文件启动 30 个可执行文件。当这 30 个完成后,我希望运行下一批可执行文件,一次再运行 30 个。 .exe 是使用批处理文件中的“开始”命令调用的,它们工作得很好 - 我可以为每组 30 个 exe 运行单独的批处理文件,它们可以像应该的那样同时运行。
我创建了一个“主”批处理文件,它调用每个子批处理文件,但我不知道如何让它按顺序运行子批处理文件,等待一个完成后再开始下一个。
如果主批处理文件是这样的:
Batch1.bat
Batch2.bat
Batch3.bat
那么只有第一个批处理文件被调用 - 其他的永远不会被调用。
如果主批处理文件是这样的:
call Batch1.bat
call Batch2.bat
call Batch3.bat
然后所有子批处理文件同时开始运行,我得到数百个可执行文件试图同时启动。
如何让主批处理文件调用第一个批处理文件,等待它完成,然后调用下一个,等待它完成,然后调用下一个,等等?
提前致谢,
游戏
【问题讨论】:
-
问题不在于catch文件是并行运行的。那是您正在使用“开始”来运行exes。 “开始”不等待程序退出。删除“开始”关键字。
-
我想同时运行每个批处理文件中的所有30个exe,所以我需要使用“开始”。如果我不使用“开始”,则 30 个 exe 不会同时运行。我希望批处理文件连续运行,但我希望每个批处理文件中的 exe 同时运行。
-
用
start "Myexe one" one.exestart "Myexe two" two.exe等开始你的前任怎么样?然后您可以使用tasklist |find "Myexe"检查其中一些是否仍在运行 -
那么你得到的正是你想要的。第一个批处理文件无需等待即可同时启动 30 个程序。然后第二个批处理文件不等待同时启动另外30个程序,总共60个。然后第三个批处理文件再启动30个,总共90个。
-
是的 - 这就是
tasklist的用途:检查是否所有的exe都已完成。 (当然,您必须将其嵌入到循环中:all of them gone? yes -> exit, else wait again)
标签: batch-file