
Ich habe eine .bat-Datei in Windows, die drei Dinge tut
cmd1 arg1 arg2
cmd2 arg3
cmd3 arg4 arg5 arg6
Manchmal kann cmd1 fehlschlagen und das ist in Ordnung, ich würde gerne weitermachen und cmd2 und cmd3 ausführen. Aber mein Bat bleibt bei cmd1 stehen. Wie kann ich das vermeiden?
Aktualisierenzur Klarstellung: Dies sind keine anderen .bat-Dateien, sondern EXE-Befehle. Hoffentlich muss ich nicht einen Baum aus .bat-Dateien erstellen, nur um dies zu erreichen.
Antwort1
&
Eine weitere Möglichkeit besteht darin, das Amtszeichen ( ) zu verwenden .
cmd1 & cmd2 & cmd3
Wenn Sie ein Double verwenden, wird es nur fortgesetzt, wenn der vorherige Befehl erfolgreich abgeschlossen wurde ( %ERRORLEVEL%==0
)
cmd1 && cmd2 && cmd3
Wenn Sie ein doppeltes Pipe-Zeichen ( ||
) verwenden, wird der nächste Befehl nur ausgeführt, wenn der vorherige mit einem Fehlercode ( %ERRORLEVEL% NEQ 0
) abgeschlossen wurde.
cmd1 || cmd2 || cmd3
Antwort2
Das hat bei mir funktioniert:
cmd.exe /c cmd1 arg1
cmd2
...
Dadurch wird cmd.exe
der Befehl in einer neuen Instanz des Windows-Befehlsinterpreters ausgeführt, sodass ein fehlgeschlagener Befehl das Batch-Skript nicht unterbricht. Das /c
Flag weist den Interpreter an, zu beenden, sobald die Ausführung des Befehls abgeschlossen ist.
cmd2
wird ausgeführt, auch wenn der erste Befehl fehlschlägt. cmd /?
Weitere Informationen finden Sie in der Windows-Eingabeaufforderung.
Antwort3
Vorausgesetzt, die Befehle sind andere .bat-Dateien, stapeln Sie die Befehle folgendermaßen:
call cmd1
call cmd2
call cmd3
Antwort4
Hinzufügen zuAntwort des Kanadiers Luke, wenn Sie Ihr Skript etwas übersichtlicher halten möchten, können Sie ^
die Befehlskette in einer neuen Zeile Ihres Skripts fortsetzen, etwa so:
scoop install windows-terminal & ^
scoop install joplin & ^
scoop install neovim & ^
scoop install autohotkey & ^
... & ^
scoop update -a
Statt des Hässlichen
scoop install windows-terminal & scoop install joplin & scoop install neovim & ...