ERROR Handling in Batch FOR Schleife
Hallo
wie im Betreff genannt würde ich gerne meine Anweisung in der FOR Schleife auf Fehler überprüfen
das Funktioniert ja
Ist es auch möglich wenn ERRORLEVEL ungleich 0 ist etwas anderes auszuführen
in etwa so?
Bekomme wenn ich die Batch aus einem VBScript aufrufe immer den WERT 255 zurück wenn ich in %FILE% einen Fehler einbau
"Das er die Datei nicht findet - existiert ja dann auch nicht"
Gruß Eldorado
wie im Betreff genannt würde ich gerne meine Anweisung in der FOR Schleife auf Fehler überprüfen
FOR /f "tokens=1*delims=" %%a in ('find /n /v ""%FILE% ^2^>nul') do IF ERRORLEVEL 0 (
...Anweisungen
)
das Funktioniert ja
Ist es auch möglich wenn ERRORLEVEL ungleich 0 ist etwas anderes auszuführen
in etwa so?
FOR /f "tokens=1*delims=" %%a in ('find /n /v ""%FILE% ^2^>nul') do IF ERRORLEVEL 0 (
...Anweisungen
) else (
exit 1
)
Bekomme wenn ich die Batch aus einem VBScript aufrufe immer den WERT 255 zurück wenn ich in %FILE% einen Fehler einbau
"Das er die Datei nicht findet - existiert ja dann auch nicht"
Gruß Eldorado
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 288911
Url: https://administrator.de/forum/error-handling-in-batch-for-schleife-288911.html
Ausgedruckt am: 23.12.2024 um 15:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo eldorado1!
Ein
prüft auf einen Errorlevel >= 0 (und wird daher wohl sehr oft zutreffen )
Was willst Du eigentlich genau mit der Schleife (sieht etwas abenteuerlich aus ) erreichen? Eigentlich sollte bei einem Fehler bei
Grüße
bastla
Ein
IF ERRORLEVEL 0
Was willst Du eigentlich genau mit der Schleife (sieht etwas abenteuerlich aus ) erreichen? Eigentlich sollte bei einem Fehler bei
find
der do
-Teil ja gar nicht ausgeführt werden ...Grüße
bastla
Hallo eldorado1!
und danach erst die Schleife ausführen ...
Grüße
bastla
möchte eben das er nur dann fortsetzt wenn er in der letzten Batch ohne Fehler beendet hat.
Du könntest vorweg testen, ob find
(ich verwende eher findstr
, dürfte in diesem Fall aber eher Geschmackssache sein) mit einem Errorlevel <> 0 endetfind /n /v "" %FILE% >nul 2>&1 || exit 1
Grüße
bastla
Hallo Eldorado.
Dein FIND wird innerhalb der FOR /F Schleife in einem separaten Kommandozeilenkontext ausgeführt. Außerhalb dieser (in Apostrophen eingefassten) Kommandozeile ist der Rückgabewert (Errorlevel) von FIND nicht abgreifbar.
Du kannst aber in dieser Kommandozeile einen "Alternativtext" ausgeben, der dann von der FOR /F Schleife verarbeitet wird. In deinem Fall findet sich in %%a die Zeilennummer, die bei 1 beginnt. Du kannst also alternativ 0 als erstes Token ausgeben und in deinem IF Statement
Weitere Möglichkeit:
... um die FOR /F Schleife nur dann auszuführen, wenn die Datei existiert.
Grüße
rubberman
Dein FIND wird innerhalb der FOR /F Schleife in einem separaten Kommandozeilenkontext ausgeführt. Außerhalb dieser (in Apostrophen eingefassten) Kommandozeile ist der Rückgabewert (Errorlevel) von FIND nicht abgreifbar.
Du kannst aber in dieser Kommandozeile einen "Alternativtext" ausgeben, der dann von der FOR /F Schleife verarbeitet wird. In deinem Fall findet sich in %%a die Zeilennummer, die bei 1 beginnt. Du kannst also alternativ 0 als erstes Token ausgeben und in deinem IF Statement
%%a GTR 0
als Kriterium annehmen.for /f "tokens=1* delims=" %%a in ('find /n /v "" "%FILE%" 2^>nul^|^|echo 0') do if %%a gtr 0 echo %%a %%b
Weitere Möglichkeit:
if exist "%FILE%" for /f ...
Grüße
rubberman