eldorado1
Goto Top

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

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

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

bastla
bastla 20.11.2015 aktualisiert um 17:07:27 Uhr
Goto Top
Hallo eldorado1!

Ein
IF ERRORLEVEL 0
prüft auf einen Errorlevel >= 0 (und wird daher wohl sehr oft zutreffen face-wink)

Was willst Du eigentlich genau mit der Schleife (sieht etwas abenteuerlich aus face-wink) erreichen? Eigentlich sollte bei einem Fehler bei find der do-Teil ja gar nicht ausgeführt werden ...

Grüße
bastla
eldorado1
eldorado1 21.11.2015 um 08:41:25 Uhr
Goto Top
Hallo,

Danke für die Antwort bastla.

Die for schleife habe ich ja um meine Datei Zeilenweise zu verarbeiten und bei bestimmten Einträgen setzte ich dann meine Variablen.

Genau im Fehlerfall soll die Schleife nicht ausgeführt werden (wird sie sowieso nicht)!

Ich möchte das aber einbauen um eine Rückmeldung zu bekommen evtl. sogar welcher Fehler vorliegt.

Wie gesagt rufe ich die Batch aus einem VBScript auf, allerdings rufe ich eine Reihe von Batchen nacheinander auf und ich möchte eben das er nur dann fortsetzt wenn er in der letzten Batch ohne Fehler beendet hat.

Gruß
bastla
Lösung bastla 21.11.2015, aktualisiert am 23.11.2015 um 12:14:44 Uhr
Goto Top
Hallo eldorado1!
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 endet
find /n /v "" %FILE% >nul 2>&1 || exit 1
und danach erst die Schleife ausführen ...

Grüße
bastla
rubberman
Lösung rubberman 21.11.2015, aktualisiert am 23.11.2015 um 12:14:46 Uhr
Goto Top
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 %%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 ...
... um die FOR /F Schleife nur dann auszuführen, wenn die Datei existiert.

Grüße
rubberman
eldorado1
eldorado1 23.11.2015 um 12:15:19 Uhr
Goto Top
Hallo,

danke für die Möglichkeiten

Gruß eldorado