![Der Pausenbefehl wird in der falschen Reihenfolge ausgeführt, wenn „start cmd /c“ mehrmalig ausgeführt wird](https://rvso.com/image/1592546/Der%20Pausenbefehl%20wird%20in%20der%20falschen%20Reihenfolge%20ausgef%C3%BChrt%2C%20wenn%20%E2%80%9Estart%20cmd%20%2Fc%E2%80%9C%20mehrmalig%20ausgef%C3%BChrt%20wird.png)
Ich habe ein Skript wie dieses:
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
pause
Der pause
Befehl wird jedoch ausgeführt, bevor alle darüber liegenden Zeilen im Skript ausgeführt wurden. Ich muss es verwenden, @start /b cmd /c
damit nicht nach jedem Dienst (ca. 100) auf „Dienst wird gestoppt …“ gewartet werden muss. Gibt es eine Möglichkeit, cmd anzuweisen, zu warten, bis alle Befehle @start /b cmd /c net stop "Service"
abgeschlossen sind, und dann die Pause auszuführen?
Um zu sehen, wovon ich spreche, führen Sie diese Batchdatei aus:
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
pause
Anstatt dies Pause
zu tun, nachdem alles Hello
ausgedruckt wurde, geschieht es mittendrin:
Antwort1
Der Befehl start
startet eine Anwendung in ihrem eigenen Kontext, unabhängig von dem, was Ihre aktuelle Konsole tut. Deshalb gibt er nach Abschluss die Ausgabe zurück, sobald Ihr aktuelles Terminal mit dem fertig ist, was gerade getan wird. Deshalb wartet Ihre Pause nicht, bis alle fertig sind, auch wenn Sie alle Startbefehle senden. Sie wartet nur lange genug, um die Prozesse zu starten. Deshalb pause
erscheint Ihr mittendrin, es ist nur eine Frage des Timings.
Um Ihr Problem zu lösen, können Sie warten, bis sie fertig sind, /wait
oder ein zweites Batch-Skript aufrufen. Auf diese Weise können Sie, wenn Sie möchten, auf einige Befehle warten und auf andere nicht:
Wartetechnik für Ihr Skript
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
pause
Technik mit Launcher-Skript
@echo off
title Laucher
:: This scripts don't need to be waited
start /b cmd /c 'script1.bat'
:: This script needs to be waited
start /wait /b cmd /c 'script2.bat'
Skript1
@echo off
title Script to run without waiting
SomeProcessThatDoesn'tNeedsToBeWaited
Skript2
@echo off
title Script to run to be waited
SomeProcessThatNeedsToBeWaited
Prost