Windows バッチ ファイルを使用してコマンドを実行し、その出力を別のコマンドにパイプして、最初のコマンドの終了ステータスを取得しようとしています。しかし、Windows バッチ ファイルが非常に難解であり、テクニックを見落としている可能性があることは認めますが、どうやらそれはできないようです。 コマンドの終了ステータスをキャプチャし、その出力をパイプするにはどうすればよいですか?
定番の使い方ですが、成功do_a_thing | tee logfile.txt
したかどうかチェックできるようにしたいです。do_a_thing
いろいろいじったり、グーグルで調べたり、StackOverflow を読んだりした後、次のことを思いつきました。
setlocal enabledelayedexpansion
set rc=-1
( false & set rc=!errorlevel! & echo rc=!rc! ) | tee logfile.txt
echo %rc%
私が期待していたものは次のとおりです。
C:\>test.bat
C:\>setlocal enabledelayedexpansion
C:\>set rc=-1
C:\>(false & set rc=!errorlevel! & echo rc=!rc! ) | tee logfile.txt
rc=1
C:\>echo 1
1
しかし、残念ながら、そうではありませんでした:
C:\>test.bat
C:\>setlocal enabledelayedexpansion
C:\>set rc=-1
C:\>(false & set rc=!errorlevel! & echo rc=!rc! ) | tee logfile.txt
rc=!rc!
C:\>echo -1
-1
" " を削除すると| tee logfile.txt
、 の期待値が生成されます!rc!
が、もちろん、ログ ファイルをキャプチャすることはできません。
C:\>test.bat
C:\>setlocal enabledelayedexpansion
C:\>set rc=-1
C:\>(false & set rc=!errorlevel! & echo rc=!rc! )
rc=1
C:\>echo 1
1