leb0rtran
Goto Top

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
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

Content-ID: 62705

Url: https://administrator.de/contentid/62705

Ausgedruckt am: 14.11.2024 um 21:11 Uhr

bastla
bastla 29.06.2007 um 21:23:00 Uhr
Goto Top
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:
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%
...
Alternativ dazu könntest Du auch die Variable %errorlevel% abfragen. Dann würde auch
if %errorlevel%==0 goto noerror
funktionieren.

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)))
Bei einem Aufruf mit Angabe einer Zahl wird der entsprechende Errorlevel gesetzt, also etwa
cscript //nologo Error.vbs 5
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]
leb0rtran
leb0rtran 29.06.2007 um 21:44:24 Uhr
Goto Top
ahhh, deshalb
Vielen Dank für die Hilfe