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-Key: 288911

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

Printed on: April 19, 2024 at 04:04 o'clock

Member: bastla
bastla Nov 20, 2015 updated at 16:07:27 (UTC)
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
Member: eldorado1
eldorado1 Nov 21, 2015 at 07:41:25 (UTC)
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ß
Member: bastla
Solution bastla Nov 21, 2015, updated at Nov 23, 2015 at 11:14:44 (UTC)
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
Member: rubberman
Solution rubberman Nov 21, 2015, updated at Nov 23, 2015 at 11:14:46 (UTC)
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
Member: eldorado1
eldorado1 Nov 23, 2015 at 11:15:19 (UTC)
Goto Top
Hallo,

danke für die Möglichkeiten

Gruß eldorado