2013-12-20 10 views
7

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?Können Sie in der Windows-Stapeldatei verzweigen?

+0

http://StackOverflow.com/Questions/2572176/How-to-make-the-batch-file-wait-until-another-batch-file-completes-execution –

+0

@DmitriyBotov: Das ist für * eine * Charge Datei nur, obwohl. Sie möchten zwei gleichzeitig ausführen und nur dann weiter ausführen, wenn * beide * gestoppt haben. – Joey

Antwort

7

können Sie, eine Art:

@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 wurden Ausführung nur pause. Dies verwendet ein mehr oder weniger eindeutiges Token, um die untergeordneten Batch-Dateien zu identifizieren. Sie werden in einem eigenen Fenster mit start gestartet und jeder erhält einen bestimmten Fenstertitel. Mit diesem Fenstertitel können wir sie wieder unter Verwendung tasklist finden und feststellen, ob sie noch laufen.

Es wird ein wenig schwierig herauszufinden, ob die Batch-Dateien noch laufen. tasklist mit dem Fenster Titelfilter tut, was es tun soll, aber es wird keinen vernünftigen Fehlerlevel zurückgeben. Aus diesem Grund müssen wir durch findstr leiten, um den Prozessnamen zu übernehmen (um sprachsensitiv zu bleiben, indem die Fehlermeldung übernommen wird).

+0

Das funktioniert! Weißt du, ob es weiterhin als geplante Aufgabe funktioniert? – Helvio

Verwandte Themen