Frage Können Sie in der Windows-Stapeldatei verzweigen?


Ich möchte zwei Programme aus der Batch-Datei (auch Batch-Dateien) starten - sie werden einige Sekunden ausführen. Dann in der Haupt-Batch-Datei möchte ich warten, während beide fertig sind und dann Hauptausführung fortsetzen. Ist das überhaupt möglich?


7
2017-12-20 07:24


Ursprung


Antworten:


Sie können, Art von:

@echo off
set Token=MAIN_%RANDOM%_%CD%
start "%Token%_1" cmd /c child1.cmd
start "%Token%_2" cmd /c child2.cmd
:loop
ping -n 2 localhost >nul 2>nul
tasklist /fi "WINDOWTITLE eq %Token%_1" | findstr "cmd" >nul 2>nul && set Child1=1 || set Child1=
tasklist /fi "WINDOWTITLE eq %Token%_2" | findstr "cmd" >nul 2>nul && set Child2=1 || set Child2=
if not defined Child1 if not defined Child2 goto endloop
goto loop
:endloop
echo Both children died.

child1 und child2 haben gerade ausgeführt pause. Dies verwendet ein mehr oder weniger eindeutiges Token, um die untergeordneten Batch-Dateien zu identifizieren. Sie werden in einem eigenen Fenster mit gestartet start und jedem wird ein bestimmter Fenstertitel gegeben. Mit diesem Fenstertitel können wir sie wieder mit Hilfe von finden tasklist und bestimmen, ob sie noch laufen.

Es wird ein wenig schwierig herauszufinden, ob die Batch-Dateien noch laufen. tasklist mit dem Fenster title filter tut was es tun soll, aber es wird keinen vernünftigen errorlevel zurückgeben. Deshalb müssen wir durchkommen findstr den Prozessnamen abzurufen (um sprachsensitiv zu bleiben, indem die Fehlermeldung übernommen wird).


7
2017-12-20 07:36