QA@IT

errorlevelのあとの数字について

7435 PV

@ITの記事「曜日や日付によって処理を切り替える(BAT File) - @IT」についての質問です。

if errorlevel 7 goto END
if errorlevel 3 call incback.bat & goto END
if errorlevel 2 call fullback.bat

上記だと、1,4,5,6(日、水、木、金)が設定されていないと思うのですが、なぜ
「月曜日にはfullback.bat、火曜~金曜日にはincback.batを呼び出し、週末(土曜日と日曜日)には何もしない」
になるんでしょうか?

回答

ifコマンドで%ERRORLEVEL%ではなくerrorlevelとなっているのがポイントです。これはオプション付きのifコマンドのイメージとなります。
ヘルプを抜粋すると(ヘルプはコマンドプロンプトで if /?またはhelp ifと入力すると出ます)

バッチ プログラム中で条件処理を実行します。

IF [NOT] ERRORLEVEL 番号 コマンド

  ERRORLEVEL 番号   最後のプログラムの実行で指定された番号以上の終了コード
                    が返されたときに、条件が真になるように指定します。

となっています。
番号以上の終了コードが返されたときに条件が真ですので、

if errorlevel 3 call incback.bat & goto END

はWScriptの方で3以上(4,5,6。7はこのバッチではその前のif文で処理される)が返された場合に処理されることになります。
(と同時にif文は比較値が大きい順にならんでいないと上手く動きません)

なお、続きのサンプルの if %errorlevel%=="3" ~ では以上ではなく、一致である必要があるので 4,5,6は対象になりません。

編集 履歴 (1)
  • よくわかりました。ありがとうございます。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。