分岐する

前回のように環境変数を用いて、システムに設定されている文字列やユーザーによって入力された文字列を取得できます。この文字列を調べ、バッチファイルで実行するコマンドを切り替えるにはifコマンドを使います。ifコマンドは、バッチプログラムで用いられる特殊なコマンドで、指定された条件が一致するときのみ特定のコマンドを実行します。

ifコマンドを使うことで、起動するプログラムをユーザーに選択させるなど、バッチプログラムが処理するオプションを入力、その結果によって処理を分岐します。このコマンドを使えば、わずかな処理の違いのために複数のバッチファイルにプログラムを分ける必要がなくなり、1 つのバッチファイルに多くの機能を統合できます。

ifコマンドにはいくつかの種類がありますが、プログラム的な分岐に利用する場合は2つの文字列を比較して互いに等しければ対象のコマンドを実行します。

if 文字列1==文字列2 コマンド

このifコマンドは、文字列1と文字列2に指定した任意の文字列が等しければ続くコマンドを実行しますが、等しくなければコマンドは実行されません。

サンプル 01

@prompt $G
if Kitty == Kitty echo このコマンドは実行されます
if Kitten == Kitty echo このコマンドは実行されません
@pause

実行結果

サンプル01の実行結果

サンプル01は、ifコマンドで比較する2つの文字列を直接バッチファイルに記述しています。実行結果を見るまでもなく、文字列が等しいかどうかはテキストを見れば一目瞭然ですが、結果から if コマンドの働きを確認できます。Kitty == Kittyで比較しているifコマンドでは続くechoコマンドが実行されていますが、Kitten == Kittyで比較しているifコマンドでは、文字列が等しくないため続くechoコマンドが実行されません。

当然、このような固定された文字列をバッチファイルに記述することに意味はなく、実践ではバッチファイルを実行するまで不確定な情報、すなわち変数を比較します。設定されている環境変数の値によって動作を変更させたり、利用者に何らかの文字列を入力させ、その結果を比較するといった応用が考えられます。

サンプル02

@echo off
echo このえぐられた足でどうやってあの攻撃をかわすか?
echo 1.突如反撃のアイデアがひらめく
echo 2.仲間がきて助けてくれる
echo 3.かわせない。現実は非常である。

set /P INPUT="3択―ひとつだけ選びなさい>"

if %INPUT%==1 echo アイデアはひらめかなかった
if %INPUT%==2 echo 仲間は助けに来なかった
if %INPUT%==3 echo 答えは3だ……現実はあまくねーぜ

pause

実行結果

サンプル02の実行結果

サンプル02は、1~3までの選択肢を表示し、いずれかの値をキーボードで入力させて、その結果から実行するコマンドを変更します。入力した値によって、結果が変化することを確認してください。