Batch Errorlevel 0
Hallo,
ich habe folgendes Problem, und zwar wenn ich if errorlevel 0 <befehl> eingebe, bearbeitet die Batch den Befehl dahinter immer, auch wenn der errorlevel zB 1 ist.
Hier der Code
Also er springt immer auf noerror.
Ich hab den ping Befehl mal reingetan um n errorlevel von ein zu reproduzieren, mit set errorlevel=1 passiert das selbe.
Kann mir jemand helfen? Bin am verzweifeln!
leb0rtran
ich habe folgendes Problem, und zwar wenn ich if errorlevel 0 <befehl> eingebe, bearbeitet die Batch den Befehl dahinter immer, auch wenn der errorlevel zB 1 ist.
Hier der Code
set d=C:\Documents and Settings\Administrator\Desktop\test\bbbb
ping -n 1 bbbbbb
echo %errorlevel%
: "%ProgramFiles%\WinRAR\rar.exe" a -dh -ilog"%c%.log" -m5 -os -ri7 -rr5p -z"%d%\com%CDATE%.%CTIME%.txt" "%CDATE%_%CTIME%" "%CDATE%_%CTIME%"
:Fehlermeldung
if errorlevel 0 goto noerror
if errorlevel 1 set error=WARNING - Es traten Fehler auf, jedoch nicht schwerwiegend (ERRORLEVEL 1)
if errorlevel 2 set error=FATAL ERROR - Es trat ein schwerer, nicht behebbarer Fehler auf (ERRORLEVEL 2)
if errorlevel 3 set error=CRC ERROR - Ein Prüfsummenfehler trat beim Entpacken auf (ERRORLEVEL 3)
if errorlevel 4 set error=LOCKED ARCHIVE - Sie versuchten, ein Archiv zu öffnen, dass mit Befehl "k" gesperrt wurde (ERRORLEVEL 4)
if errorlevel 5 set error=WRITE ERROR - Die Datei konnte nicht gespeichert werden (ERRORLEVEL 5)
if errorlevel 6 set error=OPEN ERROR - Die Datei konnte nicht geöffnet werden (ERRORLEVEL 6)
if errorlevel 7 set error=USER ERROR - Fehler in den Kommandozeilenoptionen (ERRORLEVEL 7)
if errorlevel 8 set error=MEMORY ERROR - Nicht genug Speicher für diese Operation (ERRORLEVEL 8)
if errorlevel 9 set error=CREATE ERROR - Fehler beim Erstellen einer Datei (ERRORLEVEL 9)
if errorlevel 255 set error=USER BREAK - Strg-Untbr wurde vom Benutzer gedrückt (ERRORLEVEL 255)
echo %error%
:net send pc1 "%error%BACKUP %g% @ %COMPUTERNAME% %CDATE% : %CTIME%"
echo %CDATE%_%CTIME% : Compressing failed>> "%d%.log"
echo : %error%>> "%d%.log"
goto end
:noerror
echo noerror
:end
pause
Also er springt immer auf noerror.
Ich hab den ping Befehl mal reingetan um n errorlevel von ein zu reproduzieren, mit set errorlevel=1 passiert das selbe.
Kann mir jemand helfen? Bin am verzweifeln!
leb0rtran
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62705
Url: https://administrator.de/contentid/62705
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo leb0rtran!
Aus der Hilfe zu "if":
ERRORLEVEL Nummer
Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm einen Code größer oder gleich der Nummer zurückgibt.
Daraus folgt, dass eine Abfrage der Art "if errorlevel 0" de facto sinnlos ist (da alle Errorlevel >= 0 sein sollten). "Klassisch" ist die Lösung mit absteigender Reihenfolge - der entsprechende Teil könnte dann so aussehen:
Alternativ dazu könntest Du auch die Variable %errorlevel% abfragen. Dann würde auch
funktionieren.
Zum Testen des Errorlevels kannst Du übrigens folgendes VB-Script verwenden (speichern unter "Error.vbs"):
Bei einem Aufruf mit Angabe einer Zahl wird der entsprechende Errorlevel gesetzt, also etwa
Wird kein oder ein nicht-numerisches Argument übergeben, wird ein Errorlevel 0 erzeugt.
Grüße
bastla
[Edit] (Obwohl für diesen Einsatzzweck eigentlich egal) Script gegen nicht-numerische Argumente abgesichert. [/Edit]
Aus der Hilfe zu "if":
ERRORLEVEL Nummer
Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm einen Code größer oder gleich der Nummer zurückgibt.
Daraus folgt, dass eine Abfrage der Art "if errorlevel 0" de facto sinnlos ist (da alle Errorlevel >= 0 sein sollten). "Klassisch" ist die Lösung mit absteigender Reihenfolge - der entsprechende Teil könnte dann so aussehen:
set error=
if errorlevel 255 set error=USER BREAK - Strg-Untbr wurde vom Benutzer gedrückt (ERRORLEVEL 255) & goto :Fehler
if errorlevel 9 set error=CREATE ERROR - Fehler beim Erstellen einer Datei (ERRORLEVEL 9) & goto :Fehler
...
if errorlevel 1 set error=WARNING - Es traten Fehler auf, jedoch nicht schwerwiegend (ERRORLEVEL 1) & goto :Fehler
echo noerror
pause
goto :eof
:Fehler
echo %error%
...
if %errorlevel%==0 goto noerror
Zum Testen des Errorlevels kannst Du übrigens folgendes VB-Script verwenden (speichern unter "Error.vbs"):
If WScript.Arguments.Count > 0 Then If IsNumeric(WScript.Arguments(0)) Then WScript.Quit(Abs(WScript.Arguments(0)))
cscript //nologo Error.vbs 5
Grüße
bastla
[Edit] (Obwohl für diesen Einsatzzweck eigentlich egal) Script gegen nicht-numerische Argumente abgesichert. [/Edit]