Errorlevel in einer For-Schleife (Batch-Fenster)
Habe ich das folgende windows-batch-code:
for %%i in (iidbms iigcc iigcd dmfacp dmfrcp rmcmd qwerty) do (
tasklist | findstr /i %%i
echo %errorlevel%
if %errorlevel% == 0 (echo %%i ok process found %errorlevel%)
if %errorlevel% == 1 (echo %%i no process found %errorlevel%)
)
Aber es funktioniert nicht so wie ich erwarten.
Alle Namen Prozesse iidbms, iigcc, iigcd, dmfacp, dmfrcp, rmcmd sind real, und Sie werden finden, statt qwerty ist erfunden und sollte nicht finden, so sollte print " kein Prozess gefunden 1", aber es funktioniert nicht, druckt er immer 0.
Aber was ich gemerkt habe ist, dass wenn ich das tasklist | findstr /i qwerty
von der dos-Eingabeaufforderung, kurz nach es ist, dass die %errorlevel%
= 1.
Welche Art von Antwort könnte sein, oder besser ist?
InformationsquelleAutor der Frage aemme | 2010-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
IF ERRORLEVEL gibt TRUE zurück, wenn der return-code war gleich oder höher als die angegebenen errorlevel. In deinem Beispiel, da 0 ist niedriger als 1, ist die erste errorlevel-Anweisung immer true sein, wenn der tatsächliche Fehlercode ist 0 oder höher. Was Sie wollen, ist zu testen errorlevel 1 ersten.
E. g.:
Weiteres Problem ist, wenn Sie wollen, echo der aktuelle errorlevel innerhalb der for-Schleife. Da Variablen, die aufgelöst werden, vor dem start der Schleife, echo %errorlevel% wird immer echo 0. Wenn Sie wollen auf der echo-Wert bei der Ausführung Zeit, müssen Sie zum ändern der snippet-wie so:
InformationsquelleAutor der Antwort JRL
Hinzufügen
den Anfang deines Skriptes, dann verwenden Sie
!errorlevel!
statt%errorlevel%
Die Antwort auf eine andere Frage, die wies mich in die richtige Richtung: https://stackoverflow.com/a/6658935/10245
InformationsquelleAutor der Antwort Tim Abell
Können Sie vbscript verwenden,
Verwendung:
InformationsquelleAutor der Antwort ghostdog74