Вы могли бы сделать это, если вы пишете код .NET или код Win32 C / C ++ для запуска процессов, но в пакетном файле нет способа сделать это. Как только вы используете start
, чтобы сделать proc1.exe асинхронным, нет пакетной команды, которая позволила бы вам вернуться позже и дождаться ее завершения.
Но вы можете легко сделать это на одном из языков сценариев, предназначенных для пакетной работы, Python, WSH и т. Д.
Например, вот простой скрипт с использованием Windows Script Host . WSH включен во все версии Windows, начиная с Windows 98 . Так что этот скрипт должен работать где угодно.
Этот скрипт запускает две программы и ожидает их завершения. Сохраните его как start2.wsf
. Затем просто используйте его в вашем командном файле:
start2.wsf "prog1.exe" "prog2.exe"
<package>
<job id="Start 2 Procs">
<runtime>
<description>Start 2 programs and wait for them both to finish.
</description>
<unnamed
name="program"
helpstring="the program to run"
many="false"
required="2"
/>
<example>
Example: Start2.wsf "cl -c foo.obj" "cl -c bar.obj"
</example>
</runtime>
<script language="JScript">
if (WScript.Arguments.length < 2)
{
WScript.Arguments.ShowUsage();
WScript.Quit();
}
var proc1 = WScript.Arguments.Unnamed.Item(0);
var proc2 = WScript.Arguments.Unnamed.Item(1);
var Shell = WScript.CreateObject("WScript.Shell");
var oProc1 = Shell.Exec(proc1);
var oProc2 = Shell.Exec(proc2);
while (oProc1.Status == 0 && oProc2.Status == 0)
{
WScript.Sleep(1000);
}
</script>
</job>
</package>