Wie kann ich eine Batchdatei erstellen, die einen Befehl erst nach erfolgreicher Ausführung des vorherigen Befehls ausführen soll?
Antwort1
Kommt darauf an, was Sie mit erfolgreich meinen. Wenn Sie überprüfen möchten, ob foo.exe
keine zurückgegeben wurdenBeendigungscodeungleich 0, verwenden Sie:
@echo off
start /wait foo.exe
if errorlevel 0 (
start /wait bar.exe
)
zur Ausführung bar.exe
nach foo.exe
dem zurückgegebenen Exitcode 0
. Sie können es weglassen, start /wait
wenn es sich bei der getesteten Anwendung um eine Konsolenanwendung und nicht um eine Desktopanwendung handelt.
Mehr Informationen dazu:Wie erhalte ich den Exitcode der Anwendung über eine Windows-Befehlszeile?, in Antworten vonSamuel RenkertUndGarry.
Antwort2
neben der von Hex geposteten und durch Michaels Kommentar verbesserten Fehlerlösung.
Dieses ist für das, was Sie tun möchten, sogar noch schneller.
erster Befehl && zweiter Befehl
Der zweite Befehl wird nur ausgeführt, wenn der erste Befehl erfolgreich war, d. h. wenn der erste Befehl keinen Fehler zurückgegeben hat.
Im folgenden Beispiel gibt dir asfsds diese Ausgabe zurück, gibt aber auch einen Fehler zurück
Wenn Sie „dir asdfsss & blah“ ausführen, wird es „blah“ ausgeführt, unabhängig davon, ob der erste Befehl (dir sdsdf) einen Fehler zurückgegeben hat oder nicht.
Wenn Sie sie jedoch mit && dazwischen ausführen, wird der zweite nicht ausgeführt, wenn der erste ein Fehler ist. Dies basiert auf der Idee der Booleschen Algebra. Wenn A wahr ist und B wahr ist, dann sind A UND B wahr. Um herauszufinden, ob A und B wahr sind, können Sie also A und B überprüfen oder Sie können „faul“ oder effizienter sein und nur eines überprüfen. Wenn es falsch ist, wissen Sie, dass der gesamte Ausdruck falsch ist. Und wenn es wahr ist, müssen Sie das andere überprüfen. A && B überprüft also A und überprüft B nur, wenn B überprüft werden muss. B wird also nur überprüft, wenn B wahr ist. Dieses Konzept der Booleschen Algebra wird jedoch auf Befehle angewendet. Der erste wird also ausgeführt. Der erste kann einen Fehler zurückgeben oder auch nicht. Wenn der erste einen Fehler zurückgibt, wird nicht versucht, den zweiten auszuführen und zu überprüfen. Wenn der erste keinen Fehler zurückgibt, wird der zweite versucht. Zweifellos würde der Ausdruck selbst „true“ (kein Fehler) zurückgeben, wenn beide wahr sind, und andernfalls „false“ (Fehler).
C:\Users\user>dir asdfsdf
Das Volume im Laufwerk C hat keine Bezeichnung. Die Volume-Seriennummer lautet B411-D580Verzeichnis von C:\Benutzer\Benutzer
Datei nicht gefunden <---------------- Siehe die Ausgabe von dir asdfdsds oben
C:\Users\user>dir asdfsdf & echo a
Volume in Laufwerk C hat keine Bezeichnung. Volume-Seriennummer ist B411-D580Verzeichnis von C:\Benutzer\Benutzer
Datei nicht gefunden a <--- siehe das 'echo a' lief
C:\Benutzer\Benutzer>dir asdfsdf && echo a Das
Volume im Laufwerk C hat keine Bezeichnung. Die Volume-Seriennummer lautet B411-D580Verzeichnis von C:\Benutzer\Benutzer
Datei nicht gefunden
C:\Benutzer\Benutzer>
Wenn Sie „dir filethatexists && echo a“ eingegeben haben, sehen Sie, dass der erste Befehl erfolgreich ausgeführt wird und dann „echo a“ ausgeführt wird. Ähnlich ist es mit „echo a && echo b“.