パイプ前段のERRORLEVEL
ちょっとよくわからないこと。
setlocal enabledelayedexpansion set A=123 echo !A! → 当然 123 と表示 (echo !A!) → これも 123 と表示 echo !A! | more → これも 123 と表示 (echo !A!) | more → なぜか !A! と表示
パイプの要素でカッコで囲んだ場合だけ、setlocal の影響が及ばないようである。
ということで、パイプ前段の ERRORLEVEL を知りたい場合、
setlocal enabledelayedexpansion ( prog1 & echo exit /b !ERRORLEVEL! > tmp.bat ) | prog2 call tmp.bat echo %ERRORLEVEL%
では駄目で、
cmd /v:on /c "prog1 & echo exit /b !ERRORLEVEL! > tmp.bat" | prog2 call tmp.bat echo %ERRORLEVEL%
とする必要がある。