文字列が見つかったかどうかに関係なく、Fndstr がバッチ ファイルでエラーレベル コード 0 を返すのはなぜですか?

文字列が見つかったかどうかに関係なく、Fndstr がバッチ ファイルでエラーレベル コード 0 を返すのはなぜですか?

コマンド ラインでコマンド「findstr /b」を使用し、その直後にエラーレベル コードをチェックすると、正常に動作します。バッチ ファイルで同じことを実行すると、エラー コード 0 のみが返されます。

例:

myfile.txt には値「E2B-01-07,5974,3211」が含まれています

findstr /b XXX myfile.txt
echo %errorlevel%

このコードはバッチ ファイルでは誤って 0 を表示しますが、コマンド プロンプトでは正しく 1 を表示します。

答え1

これを括弧ブロック(FORループ、IFブロック)内で実行する場合は、遅延した拡大構造の前に有効にする:

setlocal enabledelayedexpansion

変数名の前後に感嘆符を使用します -!errorlevel!

例えば

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

関連情報