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.
windows
command-line
batch-file
ConfusedNoob
quelle
quelle
cmd /C
.Antworten:
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
quelle
CHKDSK
Befehl mit Argumenten, der funktioniert. Ich tippecheck D: & check E: & check F:
und es funktioniert. Die Argumente, die die BAT-Datei enthält, umfassen die/perf /f /r /b /scan
SchalterVorausgesetzt, die Cmds sind andere .bat-Dateien, stapeln die Befehle wie folgt:
quelle
Das hat bei mir funktioniert:
Dadurch wird
cmd.exe
der Befehl in einer neuen Instanz des Windows-Befehlsinterpreters ausgeführt, sodass ein fehlgeschlagener Befehl das Stapelskript nicht unterbricht. Das/c
Flag weist den Interpreter an, zu beenden, sobald der Befehl ausgeführt wurde.cmd2
wird auch dann ausgeführt, wenn der erste Befehl fehlschlägt. Siehecmd /?
von Windows - Eingabeaufforderung für weitere Informationen.quelle