Wie kann ich meine .bat-Datei nach einem Fehler fortsetzen lassen?


30

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 cmd2 und cmd3 weitermachen und ausführen. Aber mein Schläger stoppt bei cmd1. Wie kann ich das vermeiden?

Update aus Gründen der Übersichtlichkeit - dies sind keine anderen .bat-Dateien, sondern exe-Befehle. Hoffentlich muss ich keinen Baum von .bat-Dateien erstellen, um dies zu erreichen.


Sie sollten in der Lage sein, den Befehl mit zu starten cmd /C.
Der Hochstapler

1
Sie müssen ein bestimmtes Codebeispiel für das anzeigen, was nicht funktioniert. Batch-Dateien werden normalerweise nicht automatisch beendet, wenn ein Befehl mit einem Fehler fehlschlägt. Batch-Dateien werden bei einem Syntaxfehler beendet. Wenn Ihr Code bei einem Exe-Fehler beendet wird, muss in Ihrem Code eine Logik vorhanden sein, die dieses Verhalten verursacht.
Dbenham

Antworten:


18

Eine andere Möglichkeit ist die Verwendung von amperstand ( &).

cmd1 & cmd2 & cmd3

Wenn Sie ein Double verwenden, wird es nur fortgesetzt, wenn der vorherige Befehl erfolgreich ausgeführt wurde ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Wenn Sie eine doppelte Pipe ( ||) verwenden, wird der nächste Befehl nur ausgeführt, wenn der vorherige mit einem Fehlercode ( %ERRORLEVEL% NEQ 0) abgeschlossen wird.

cmd1 || cmd2 || cmd3


Kann ich das auch beim Übergeben von Argumenten tun? Ich habe es nur versucht und es hat nicht funktioniert.
ConfusedNoob

@ConfusedNoob Ich mache die ganze Zeit ... Ich habe einen CHKDSKBefehl mit Argumenten, der funktioniert. Ich tippe check D: & check E: & check F:und es funktioniert. Die Argumente, die die BAT-Datei enthält, umfassen die /perf /f /r /b /scanSchalter
Canadian Luke REINSTATE MONICA

2
gut! brachte mir eine Idee, wie man mehrere Wiederholungsversuche ausführt: cmd || cmd || ... wird den nächsten
Befehl

1
Dies macht lange Skripte unlesbar, gibt es keinen anderen Weg?
Januar

1
@CanadianLuke Well Batch ist das Windows Batch Framework. Wie können Hunderte von Befehlen nicht interaktiv ausgeführt werden? Gibt es einen besseren Ansatz in der Power Shell? Ist es schlimmer, dorthin zu ziehen?
Januar

11

Vorausgesetzt, die Cmds sind andere .bat-Dateien, stapeln die Befehle wie folgt:

 call cmd1
 call cmd2
 call cmd3

10

Das hat bei mir funktioniert:

cmd.exe /c cmd1 arg1
cmd2
...

Dadurch wird cmd.exeder Befehl in einer neuen Instanz des Windows-Befehlsinterpreters ausgeführt, sodass ein fehlgeschlagener Befehl das Stapelskript nicht unterbricht. Das /cFlag weist den Interpreter an, zu beenden, sobald der Befehl ausgeführt wurde.

cmd2wird auch dann ausgeführt, wenn der erste Befehl fehlschlägt. Siehe cmd /?von Windows - Eingabeaufforderung für weitere Informationen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.