標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

今日の学び:CMD.EXE での遅延評価

nyagos では、バッチファイルを呼び出す時、環境変数の変更を取り込むため

%COMSPEC% /V:ON /S /C "call "バッチファイル名" &
set "ERRORLEVEL_=!ERRORLEVEL!" &
(cd & set > 一時ファイル名)  "

ということをしていた。

が、これ、ERRORLEVEL の値を参照するために遅延評価オプションを有効にしなくてはいけないため、バッチ実行時の CMD.EXE のデフォルト状態が変わってしまうという問題があった。

が、今日、この解決法が分かった。

リンク先の nullpo-head/source-win-bat のコードを見ると、

" & call set SW_EXITSTATUS=%^ERRORLEVEL% "

とかやってる。call set !? なんじゃそりゃ

ぐぐってみると、解説記事があった。

なるほどね!さっそく nyagos にも組み込みました!