Windowsのバッチで
For文の中で環境変数ERRORLEVELを使って処理をすると思い通りに処理されない。
原因は、処理前にFOR処理を展開するため。
対処法は、 IF ERRORLEVEL 0 echo hoge 等。環境変数を使用しないように対応する。
理由は以下の通り
http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.htmlより抜粋
ちなみに、以下のような書き方は、分かりにくいが、やはりダメ。
>test.bat & if %ERRORLEVEL% neq 0 echo fail
>test.bat & echo %ERRORLEVEL%
なぜなら、環境変数は全体の実行開始前に展開されるから。
つまり実行前に%ERRORLEVEL%の値が0だったとすると、以下のように展開されてから実行されることになる。
>test.bat & if 0 neq 0 echo fail
>test.bat & echo 0
したがって、test.batがどんな値を返して(%ERRORLEVEL%にセットされて)も、実行前の値で「&」以降が処理されるということになる。
(この為に、エラーコードチェックに関してはERRORLEVELという演算子がわざわざ用意されているわけだ。これなら値の取得自体はif文の実行時に行うわけだから。)
[通知用URL]
Tweet
最終更新時間:2006年09月01日 12時11分54秒