![cmd - Führen Sie eine Batchdatei aus, nachdem alle anderen gleichzeitigen Batchdateien fertig sind.](https://rvso.com/image/770100/cmd%20-%20F%C3%BChren%20Sie%20eine%20Batchdatei%20aus%2C%20nachdem%20alle%20anderen%20gleichzeitigen%20Batchdateien%20fertig%20sind..png)
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 10
in der Schleife auf, um die Prüfungen zu verlangsamen.