Warum gibt Fndstr in einer Batchdatei einen Fehlerlevelcode von 0 zurück, unabhängig davon, ob die Zeichenfolge gefunden wurde oder nicht?

Warum gibt Fndstr in einer Batchdatei einen Fehlerlevelcode von 0 zurück, unabhängig davon, ob die Zeichenfolge gefunden wurde oder nicht?

Wenn ich den Befehl „findstr /b“ in der Befehlszeile verwende und dann direkt im Anschluss den Fehlercode überprüfe, funktioniert es einwandfrei. Wenn ich dasselbe in einer Batchdatei mache, wird nur der Fehlercode 0 zurückgegeben.

Beispiel:

myfile.txt enthält den Wert „E2B-01-07,5974,3211“

findstr /b XXX myfile.txt
echo %errorlevel%

Dieser Code zeigt in einer Batchdatei fälschlicherweise 0 an, in der Eingabeaufforderung jedoch korrekt 1.

Antwort1

Wenn Sie dies in einem Klammerblock (FOR-Schleife, IF-Block) tun, dann müssen Sieverzögerte Expansionaktiviert vor der Struktur:

setlocal enabledelayedexpansion

und verwenden Sie Ausrufezeichen um den Variablennamen -!errorlevel!

z.B

@echo off
setlocal enabledelayedexpansion
for %%A in (*.txt) do (
    echo File:       %%A
    findstr /b "E2B-01-07,5974,3211" "%%A"
    echo Errorlevel: !errorlevel!
)

verwandte Informationen