トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

環境変数展開のタイミング(バッチ)

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文の実行時に行うわけだから。)

 

[カテゴリ: OS > Windows > コマンドプロンプト]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2006年09月01日 12時11分54秒