BATCH - IF-Abfrage funktioniert nicht
Hallo,
auf einem Vista 64 prof Rechner versuche ich gerade eine simple Batchdatei zu erstellen, aber die Syntax wird mir nicht angenommen:
Das Ziel X: ... gibt es nicht, also wird ERRORLEVEL 4 erzeugt. Die Ausgabe ist aber solches:
Warum geht das GOTO so nicht?
Warum funktioniert das "==" hier denn nicht? Oder auch kein GTR geht.
Was mache ich falsch?
Danke.
auf einem Vista 64 prof Rechner versuche ich gerade eine simple Batchdatei zu erstellen, aber die Syntax wird mir nicht angenommen:
xcopy C:\test.bat x:\test.bat
@echo %ERRORLEVEL%
IF %ERRRLEVEL% == 4 GOTO ERR
IF %ERRRLEVEL% == 0 GOTO END
:ERR
echo ERR
:END
echo END
Das Ziel X: ... gibt es nicht, also wird ERRORLEVEL 4 erzeugt. Die Ausgabe ist aber solches:
c:\>xcopy C:\test.bat x:\test.bat
Ungültige Laufwerkangabe
0 Datei(en) kopiert
4
"GOTO" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
c:\>IF == 4 GOTO ERR
Ungültige Laufwerkangabe
0 Datei(en) kopiert
4
"GOTO" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
c:\>IF == 4 GOTO ERR
Warum geht das GOTO so nicht?
Warum funktioniert das "==" hier denn nicht? Oder auch kein GTR geht.
Was mache ich falsch?
Danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 170858
Url: https://administrator.de/forum/batch-if-abfrage-funktioniert-nicht-170858.html
Ausgedruckt am: 23.04.2025 um 07:04 Uhr
13 Kommentare
Neuester Kommentar
@Skyemugen
verwendet wird
(konserviert den Errorlevel des "
Ansonsten würde ich aber auch eher
verwenden und danach, wenn's denn überhaupt erforderlich ist, den Errorlevel - und dann aber per
- auswerten.
Grüße
bastla
... was bitte ist %ERRRLEVEL%?
Könnte etwa Sinnvolles sein, wenn davor einset %ERRRLEVEL%=%ERRORLEVEL%
xcopy
") ...Ansonsten würde ich aber auch eher
xcopy C:\test.bat x:\test.bat && goto :END
if errorlevel 4 goto :ERR
if errorlevel 3 ...
...
Grüße
bastla
Aloha bastla,
hm, dem letzten Vorschlag möchte ich widersprechen: (das wenn unbedingt erforderlich)
Wenn man
greetz André
hm, dem letzten Vorschlag möchte ich widersprechen: (das wenn unbedingt erforderlich)
Wenn man
if %errorlevel%==4
verwendet, ist es genau der Wert, den man angibt, im Gegensatz zu if errorlevel 4
, wo der Wert mindestens dem entspricht, den man angibt, was bedeutet, dass if errorlevel 0
bei E4 ebenso gültig ist, während if %errorlevel%==0
ungültig ist, da hier nicht nach mindestens abgefragt wird.greetz André
Hallo Skyemugen!
wirst Du von mir nie als Vorschlag finden, da (wie Du richtig siehst) unsinnig ...
Der Aufbau sollte daher, wie dargestellt, mit dem höchsten zu prüfenden Wert (hier als Annahme "4") beginnen und dann absteigend die weiteren interessierenden Errorlevel abfragen.
Den Fall "Errorlevel=0" habe ich außerdem schon vorweg per "
Grüße
bastla
P.S.: Das "wenn unbedingt erforderlich" bezog sich nur darauf, ob der Errorlevel noch genauer ausgewertet werden soll, oder ob es nicht bereits genügt, dass (irgend) ein Fehler gemeldet wurde ...
if errorlevel 0
Der Aufbau sollte daher, wie dargestellt, mit dem höchsten zu prüfenden Wert (hier als Annahme "4") beginnen und dann absteigend die weiteren interessierenden Errorlevel abfragen.
Den Fall "Errorlevel=0" habe ich außerdem schon vorweg per "
&&
" abgehandelt.Grüße
bastla
P.S.: Das "wenn unbedingt erforderlich" bezog sich nur darauf, ob der Errorlevel noch genauer ausgewertet werden soll, oder ob es nicht bereits genügt, dass (irgend) ein Fehler gemeldet wurde ...
Aloha bastla,
gut E0 war ein dummes Beispiel, da ich jedoch nahe dem EP bleiben wollte, wollte ich nur noch einmal klarmachen, dass die beiden Varianten eben unterschiedlich arbeiten und wenn man nicht jeden einzelnen E-Level abfragen bzw. definieren will aber sagen wir für den Fall E2 und E4 etwas angeben will, man nicht mit dem mindestens-Wert arbeiten sollte.
Gut, das war ein wenig an der hiesigen Situation vorbei aber mir war heute mal so, das nebenbei erwähnt zu haben.
ist ja auch eine unterschwellige Information an den TE
greetz André
gut E0 war ein dummes Beispiel, da ich jedoch nahe dem EP bleiben wollte, wollte ich nur noch einmal klarmachen, dass die beiden Varianten eben unterschiedlich arbeiten und wenn man nicht jeden einzelnen E-Level abfragen bzw. definieren will aber sagen wir für den Fall E2 und E4 etwas angeben will, man nicht mit dem mindestens-Wert arbeiten sollte.
Gut, das war ein wenig an der hiesigen Situation vorbei aber mir war heute mal so, das nebenbei erwähnt zu haben.
greetz André
Hallo franc!
- abgesehen davon war ich oben schon davon ausgegangen, dass Du nur zwischen "Fehler" und "kein Fehler" unterscheiden wolltest, und das lässt sich am einfachsten so realisieren:
(wobei ein "
Grüße
bastla
"if errorlevel 4" entspricht somit "IF %ERRORLEVEL% LEQ 4"
Nope - es wäreIF %ERRORLEVEL% GEQ 4
xcopy C:\test.bat x:\test.bat && goto :END || goto :ERR
goto
" auch schon genügen könnte) ..Grüße
bastla
Nö, eigentlich umgekehrt: geq - denn es entspricht mindestens nicht höchstens
greetz André
edit: too late ^_^
Hallo franc!
Oder so:
oder
Grüße
bastla
Oder so:
robocopy C:\test1 X:\test1 || (set "Quelle=test1" & goto ERR )
...
:ERR
blat Fehler bei Sicherung von %Quelle% blabla
...
set "Fehler="
for %%i in ("test1" "test2" "test3") do call :Sichern "%%i"
if defined Fehler blat Fehler bei %Fehler% ...
goto :eof
:Sichern
robocopy "C:\%~1" "X:\%~1" && goto :eof
set "Fehler=%Fehler%_%1
goto :eof
bastla