Beenden Stapel mit EXIT /B-X`, wo X>=1 wirkt, wie wenn Befehl erfolgreich abgeschlossen, wenn mit && oder || Operatoren zwischen batch-Aufrufe
Ich versuche, die Kette eine Reihe von .bat-Dateien mit der EXIT /B X
Befehl ein, um den Erfolg oder Misserfolg und die &&
und ||
für die bedingte Ausführung der next .bat (z.B. a.bat && b.bat
).
Unabhängig davon, ob ich anrufen EXIT /B 0
oder irgendetwas anderes zu Ende.Fledermaus, a.bat && b.bat
ruft b an.Fledermaus hinterher. Mein Verständnis ist, dass EXIT /B 0
sollte ERRORLEVEL=0
was ist Erfolg, so dass die &&
fortgesetzt werden soll. Das Gegenstück zu diesem ist, dass der Aufruf EXIT /B 1
sollte ERRORLEVEL=1
die Fehler, so dass die &&
sollte aufhören. Was vermisse ich hier?
Verharmlost Beispiel:
Für nicht-batch-Befehle, als erwartet:
C:\> echo test|findstr test>NUL && echo yes
yes
C:\> echo test|findstr test>NUL || echo yes
C:\> echo test|findstr nope>NUL && echo yes
C:\> echo test|findstr nope>NUL || echo yes
yes
Mit EXIT /B
immer sieht.Fledermaus so erfolgreich:
C:\> echo @EXIT /B 0 > a.bat
C:\> a.bat && echo yes
yes
C:\> a.bat || echo yes
C:\> echo @EXIT /B 1 > a.bat
C:\> a.bat && echo yes
yes
C:\> a.bat || echo yes
Wie kann ich den Ausstieg aus einem.Fledermaus, so dass a.bat && b.bat
und a.bat || b.bat
Verhalten wie erwartet?
Alle Befehle ausgeführt werden cmd.exe auf Windows XP SP3.
InformationsquelleAutor der Frage Jordan Evens | 2011-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mich Fragen, exit-codes in batch-Dateien defekt sind, die für diesen genauen Grund, aber es ist ein hacky Problemumgehung, die Sie verwenden können. Als die Letzte Zeile der batch-Datei verwenden:
Da es sich um einen tatsächlichen Prozess, der gestartet wird, erhalten Sie einen echten Prozess exit-code und && und || funktionieren wird.
InformationsquelleAutor der Antwort Anders
Es funktioniert wie es sollte bei der Verwendung von nennen zur Ausführung von batch-Skripts mit einer exit-Anweisung:
Durch die Art und Weise, es sagt falsch auf Microsoft docs:
InformationsquelleAutor der Antwort marapet
Wenn Sie
start /wait
können Sie auch dies auf eine sehr einfache Windows-Anwendung (in C# geschrieben), genannt von DOS-batch-Dateien, z.B. so:Dann die Anwendung aufgerufen werden können, von Ihrem DOS-batch-Datei und bewerten das Ergebnis. also
HINWEIS: die
/wait
ist nicht notwendig, in einer batch-Datei.Könnte passieren in der return-code, den Sie möchten als argument an das Programm.cs und auf diese Weise garantiert.
InformationsquelleAutor der Antwort user2989311
Ich denke, Sie sind immer
Errorlevel=0
mit, weil Sie tatsächlich ausführen.bat (unabhängig von der return-code).Würden Sie fehlschlagen der Prüfung, wenn
a.bat
gibt es nicht.CALL
ist die einzige Möglichkeit, die ich kenne ziehen in der Umgebung vona.bat
.InformationsquelleAutor der Antwort TheDude