malcomxcia
Goto Top

Errorlevel Problem ?

Tach'en erst mal ! ! !

Ich habe folgendes Problem, das mir der errorlevel immer falsch ausgegeben wird sobald ich ihn in einer If Abfrage ausgeben lasse.

Beispiel

So geht's:

if defined fullbackup (
echo ------------STARTE FULLBACKUP-----------------

SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>%cd%\log\log_%tag%_backup.log
echo ##########################################  %errorlevel%
echo %errorlevel% >> %cd%\log\log_%tag%_backup.log
rem if %errorlevel% GEQ 1 goto fehlermail
)

und mit der If Abfrage gehts NICHT und ich bekomme bei der Ausgabe des errorlevels immer 0

echo ------------STARTE FULLBACKUP-----------------

SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>%cd%\log\log_%tag%_backup.log
echo ##########################################  %errorlevel%
echo %errorlevel% >> %cd%\log\log_%tag%_backup.log
rem if %errorlevel% GEQ 1 goto fehlermail

Wo liegt da mein Fehler ?

Gruß
Malcom

Content-ID: 208893

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

Ausgedruckt am: 16.11.2024 um 13:11 Uhr

colinardo
colinardo 01.07.2013 aktualisiert um 13:06:21 Uhr
Goto Top
Hallo Malcom,
das %errorlevel% gillt immer für den in der vorherigen Zeile ausgeführten Befehl.Dieser ändert sich z.B. nach dem
echo %errorlevel%
wieder.
Du musst die Ausgabe von %errorlevel% in einer Variablen speichern
set errorcode=%errorlevel%
und dann mit %errorcode% abfragen

Grüße Uwe
malcomxcia
malcomxcia 01.07.2013 um 13:32:26 Uhr
Goto Top
Erst mal vielen Dank für deine Antwort ;)

öhm ja eben da genau passts ja schon nicht

SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>%cd%\log\log_%tag%_backup.log
echo ##########################################  %errorlevel%

bezieht sich doch somit auf die letzte Zeile

Wie schon gemeint, passt ja die Ausgabe, nur eben nicht mit der If Abfrage. wenn ich die If weglasse gibt er mir den errorlevel richtig aus undn mit der IF immer nur 0

Gruß
Malcom
colinardo
colinardo 01.07.2013 aktualisiert um 13:53:27 Uhr
Goto Top
so geht das ...
echo ------------STARTE FULLBACKUP-----------------

SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>log\log_%tag%_backup.log
set returncode=%errorlevel%
echo ##########################################  %returncode%
echo %returncode% >>log\log_%tag%_backup.log
if %returncode% GEQ 1 goto fehlermail
bastla
bastla 01.07.2013 aktualisiert um 15:11:31 Uhr
Goto Top
Hallo malcomxcia!

In Deinem Beispiel oben wird ja vor dem if noch die Zeile
echo %errorlevel% >> %cd%\log\log_%tag%_backup.log
ausgeführt - wenn dies fehlerfrei gelungen ist, wird natürlich der Errorlevel 0 sein; daher, wie von collinardo empfohlen, zuerst den Errorlevel in eine Variable (im Beispiel %returncode%) schreiben und danach diese verwenden ...
BTW: %cd% in der Pfadangabe bringt eigentlich nix (außer natürlich, es wäre im Pfad zum aktuellen Ordner zB ein Leerzeichen enthalten - dann bringt's einen Fehler face-wink) ...

Grüße
bastla
malcomxcia
malcomxcia 01.07.2013 aktualisiert um 17:02:38 Uhr
Goto Top
@colinardo

;) keine Angst schon probiert jedoch gleiches Resultat

Also hab da ganze jetzt mal runtergespeckt ;)

So gehts NICHT

echo off
set "fullbackup=True"  
if defined fullbackup (
SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>%cd%\log\log_%tag%_backup.log
echo ##########################################  %errorlevel%
)
pause

Und ohne die if also OHNE if defined fullbackup ( KLAPPTS und er gibt mir 1 aus und oben bekomme ich immer 0
Den Fehler produzeire ich durch G (falscher Laufwerksbuchstabe)
echo off
set "fullbackup=True"  
SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>%cd%\log\log_%tag%_backup.log
echo ##########################################  %errorlevel%

pause

Malcom
colinardo
colinardo 01.07.2013 aktualisiert um 14:48:39 Uhr
Goto Top
ah OK jetzt verstanden, aber deine zwei Code-Abschnitte im letzten Post haben keinerlei Unterschiede....

hier musst du delayed expansion benutzen:

@echo off & setlocal ENABLEDELAYEDEXPANSION
set "fullbackup=True"  
if defined fullbackup (
SNAPSHOT c:   g:\backup\server\%tag%_$computername_$disk.sna -L40000 >>%cd%\log\log_%tag%_backup.log
set returncode=!errorlevel!
echo ##########################################  !returncode!
)
pause
Variablen innerhalb von Klammerausdrücken müssen mit "Delayed Expansion" expandiert werden.
malcomxcia
malcomxcia 01.07.2013 um 19:17:54 Uhr
Goto Top
Hey super vielen Dank und hat alles geklappt ;)

Muss mir nur nochmal genauer durchlesen was das bezweckt. Wenn dann will ich's ja auch verstehen.

Gruß und Danke nochmal
Malcom