cmd - Führen Sie eine Batchdatei aus, nachdem alle anderen gleichzeitigen Batchdateien fertig sind.

cmd - Führen Sie eine Batchdatei aus, nachdem alle anderen gleichzeitigen Batchdateien fertig sind.

Ich habe eine einfache Batchdatei, die andere Batchdateien aufruft. Sie sieht folgendermaßen aus:

start /b run_part1.bat
start /b run_part2.bat
start /b run_part3.bat
start /b run_part4.bat

run_last.bat  // fires immediately, how to make this line wait until above finishes?

Mit /b werden die ersten 4 Dateien gleichzeitig ausgeführt. Alle sind innerhalb von 1,5 Stunden fertig.

Ich brauche ein weiteres Skript, um nach Abschluss aller vier Dateien aufzuräumen. Allerdings wartet run_last.bat nicht auf die ersten 4 Dateien, sondern wird gleichzeitig mit den ersten 4 aufgerufen.

Gibt es eine Möglichkeit, dies zu erreichen?

Danke schön.

Antwort1

Verwenden Sie nicht länger die veraltete Eingabeaufforderung, sondern Powershell. Sie können dieThreadJob-Modul, wie beschrieben indiese hervorragende Antwort auf SO:

$commands = { ./run_part1.bat },
            { ./run_part2.bat },
            { ./run_part3.bat },
            { ./run_part4.bat }
$jobs = $commands | Foreach-Object { Start-ThreadJob $_ }
$jobs | Receive-Job -Wait -AutoRemoveJob
./run_last.bat 

Antwort2

Sie können CALL verwenden, es ruft eine Bath-Datei aus einer anderen Bath-Datei auf.

für weitere Informationenhttps://www.robvanderwoude.com/call.php

Antwort3

In Batchdateien ist nichts integriert, um dies zu handhaben.

Sie können die 4 Batchdateien ändern, um eine Flagdatei zu erstellen, wenn sie fertig sind. Führen Sie dann in der Hauptbatchdatei eine Schleife aus, um nach den Flagdateien zu suchen, und rufen Sie sie timeout /t 10in der Schleife auf, um die Prüfungen zu verlangsamen.

verwandte Informationen