プログラムを書くときに使われる条件分岐。
バッチファイルにも条件分岐を行うための『if』コマンドがあります。
この記事では、『if』コマンドについて解説します。
ifの使い方
バッチファイルの『if』コマンドは次のように書きます。
if 条件 (
条件が真だったときの処理
)
条件が『真』になったときだけ、if文の次の()で囲まれた部分のコマンドが実行されます。
条件が真のときに実行するコマンドが1行のときは、次のようにも書けます。
if 条件 条件が真だったときの処理
例えば、2つの文字が同じかどうかの比較は、『文字列1==文字列2』のように書きます。
一般的なプログラム言語では、文字列は『”(ダブルクォーテーション)』でくくる必要がありますが、バッチファイルでは『”』は必要ありません。
※文字列に空白を含む場合は、『”』で囲む必要があります。
@echo off
if あいうえお == あいうえお (
echo ここは実行されます
)
if あいうえお == かきくけこ (
echo ここは実行されません
)
pause
このバッチファイルを実行したら次のようになります。
バッチファイルの作り方については、こちらの記事を参考にしてください。
このように「あいうえお==あいうえお」は同じ文字列なので『真』と判定され、「あいうえお==かきくけこ」は違う文字列なので『偽』と判定されます。
not
条件が『偽』のときに実行したいときは、『not』を使います。
@echo off
if not あいうえお == かきくけこ (
echo ここは実行されます
)
pause
if else
複数の条件分岐をしたい場合は『else』を使います。
if 条件1 (
条件1が真だったときの処理
) else if 条件2 (
条件2が真だったときの処理
) else (
それ以外のときの処理
)
大文字と小文字を区別しない
『if』コマンドでは、文字列を比較するとき大文字と小文字は区別して判定されます。
以下のコードを実行すれば、「別の文字です」と表示されます。
@echo off
if apple == APPLE (
echo 同じ文字です
) else (
echo 別の文字です
)
pause
大文字と小文字を区別したくないときは『/i』を使います。
@echo off
if /i apple == APPLE (
echo ここは実行されます
)
if /i apple == Apple (
echo ここも実行されます
)
pause
比較
以下のバッチファイルを実行すれば、「15は30より小さいです」と表示されます。
『gtr』演算子は、次の値より大きいかを比較するので、15が30より大きいかを判定しています。
@echo off
if 15 gtr 30 (
echo 15は30より大きいです
) else (
echo 15は30より小さいです
)
pause
比較演算子には、次のようなものがあります。
- equ:次の値と等しい
- neq:次の値と等しくない
- lss:次の値未満
- gtr:次の値より大きい
- leq:次の値以下
- geq:次の値以上
『==』と『equ』の違い
『==』と『equ』は、同じく『等しい』ときですが、違いがあります。
- 『==』:文字列として判定
- 『equ』:値として判定
次のコードを見てください。「8」と「010」が等しいか判定しています。
両方とも「8と010は違います」と表示されると思いますよね。
@echo off
if 8 == 010 (
echo 8と010は同じです
) else (
echo 8と010は違います
)
if 8 equ 010 (
echo 8と010は同じです
) else (
echo 8と010は違います
)
pause
実行すると次のように表示されます。
『==』では違うと判定されましたが、『equ』では同じと判定されています。
これは、なぜでしょうか?
バッチファイルでは、「0」で始まる数は8進数として扱われます。
つまり「010」は、8進数の数だと判断され、8進数の「10」を10進数にすると「8」になります。
10進数の「8」と8進数の「010」は、同じ数値のため、『equ』では『true』と判定されてしまったのが原因です。
ファイルの存在
『if exist ファイル名 コマンド』で、指定したファイル名が存在するかを判定することができます。
以下のバッチファイルは、バッチファイルと同じディレクトリに『test.txt』ファイルが存在するか判定します。
@echo off
if exist test.txt (
echo test.txtファイルが存在します
) else (
echo test.txtファイルが存在しません
)
pause
ファイル名を絶対パスで指定することもできます。
@echo off
if exist C:\Users\user\Documents\test.txt (
echo test.txtファイルが存在します
) else (
echo test.txtファイルが存在しません
)
pause
errorlevel
バッチファイルには、直前の処理が成功したかの判断に『errorlevel』が使われます。
『errorlevel』は、実行したコマンドが成功すれば「0」、失敗した場合は1以上の数値が格納されます。
『if errorlevel 番号 コマンド』で、errorlevelが番号以上のときにコマンドを実行できます。
@echo off
if errorlevel 1 (
echo errorlevelが1以上
) else (
echo errorlevelが1より小さい
)
pause
エラーレベルは、変数「errorlevel」に格納されているので、比較演算子を使うこともできます。
@echo off
if %errorlevel% equ 1 (
echo errorlevelが1
) else (
echo errorlevelが1以外
)
pause
変数の定義
バッチファイルでは、『set 変数名=値』で変数を定義しますが、変数が定義されているか判定することができます。
それが『if defined 変数 コマンド』です。
@echo off
if defined a (
echo 変数aが定義されています
) else (
echo 変数aが定義されていません
)
set a=あいうえお
if defined a (
echo 変数aが定義されています
) else (
echo 変数aが定義されていません
)
pause
1番目の『if』コマンドのときには変数aが定義されていませんが、2番目の『if』コマンドのときには変数aが定義されているので実行されるコマンドが異なっています。
まとめ
バッチファイルでは、『if』コマンドを使えば条件分岐をすることができます。
- if [not] 文字列1==文字列2 コマンド
- if [not] exist ファイル名 コマンド
- if [not] errorlevel 番号 コマンド
- if [not] defined 変数 コマンド
比較演算子などには次のようなものがあります。
- not:条件が偽の場合にコマンドを実行する
- equ:次の値と等しい
- neq:次の値と等しくない
- lss:次の値未満
- gtr:次の値より大きい
- leq:次の値以下
- geq:次の値以上
- /i:文字列の比較で、大文字と小文字を区別しない
- /?:ヘルプを表示する
バッチファイルを使えば、いろいろな作業を効率化することができます。