¿Por qué Fndstr devuelve un código de nivel de error de 0 en un archivo por lotes, ya sea que se encuentre la cadena o no?

¿Por qué Fndstr devuelve un código de nivel de error de 0 en un archivo por lotes, ya sea que se encuentre la cadena o no?

Cuando se utiliza el comando "findstr /b" en la línea de comando y luego se verifica el código de nivel de error inmediatamente después, funciona bien. Cuando hago lo mismo en un archivo por lotes, solo devuelve un código de error de 0.

Ejemplo:

myfile.txt contiene el valor "E2B-01-07,5974,3211"

findstr /b XXX myfile.txt
echo %errorlevel%

Este código mostrará incorrectamente 0 en un archivo por lotes, pero mostrará correctamente 1 en el símbolo del sistema.

Respuesta1

Si está haciendo esto en un bloque de corchetes (bucle FOR, bloque IF), entonces necesita tenerexpansión retrasadahabilitado antes de la estructura:

setlocal enabledelayedexpansion

y use signos de exclamación alrededor del nombre de la variable -!errorlevel!

p.ej

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

información relacionada