Por que Fndstr retorna um código de nível de erro 0 em um arquivo em lote, independentemente de a string ser encontrada ou não?

Por que Fndstr retorna um código de nível de erro 0 em um arquivo em lote, independentemente de a string ser encontrada ou não?

Ao usar o comando "findstr /b" na linha de comando e verificar o código do nível de erro imediatamente a seguir, ele funciona bem. Quando faço o mesmo em um arquivo em lote, ele retorna apenas um código de erro 0.

Exemplo:

myfile.txt contém o valor "E2B-01-07,5974,3211"

findstr /b XXX myfile.txt
echo %errorlevel%

Este código exibirá 0 incorretamente em um arquivo em lote, mas exibirá 1 corretamente no prompt de comando.

Responder1

se você estiver fazendo isso em um bloco de colchetes (loop FOR, bloco IF), então você precisa terexpansão atrasadahabilitado antes da estrutura:

setlocal enabledelayedexpansion

e use pontos de exclamação ao redor do nome da variável -!errorlevel!

por exemplo

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

informação relacionada