バッチファイルを使おう(初心者向け・ifコマンド基礎編2)

前回、バッチファイルのifコマンドの基礎の基礎について紹介させて頂きました。今回はその続きです。基本形を認識しておかないと、少し難しいため、紹介記事を2本立てにさせて頂きました。基本形及び基礎の基礎については以下のリンクを参照願います。

ifコマンドの基本形(再掲)

既に紹介させて頂いた基本形についての再掲です。ifコマンドの基本形は以下です。

if 条件式 コマンド

そして判定条件の条件式は3種類です。

IF [NOT] ERRORLEVEL 番号 コマンド
IF [NOT] 文字列1==文字列2 コマンド
IF [NOT] EXIST ファイル名 コマンド

 『ERRORLEVEL 番号』は直前に実行したコマンドの戻り値で真偽判定、『文字列1==文字列2』は文字列の一致を真偽判定、『EXIST ファイル名』はファイルの存在を真偽判定でした。さて、「条件式がこれだけしかないの?」と思う方が大多数と思います。プログラム言語の場合だと数値を判定出来るのは勿論、数値の大小判定が出来ます。そして、バッチファイル、もとい、コマンドプロンプトならではの判定条件も存在します。今回はその話ですね。

比較演算子を用いた条件判定

プログラム言語で非常に頻出の比較演算子での条件判定もあります。「help if」でDOS先生に尋ねてみると、比較演算子の回答を頂きますので抜粋します。

コマンド拡張機能を有効にすると、IF は次のように変更されます:
    IF [/I] 文字列 1 比較演算子 文字列 2 コマンド
    IF CMDEXTVERSION 番号 コマンド
    IF DEFINED 変数 コマンド
比較演算子は、次のいずれかです:
    EQU - 等しい
    NEQ - 等しくない
    LSS - より小さい
    LEQ - 以下
    GTR - より大きい
    GEQ - 以上

ここでは文字列の部分に注目します。

IF [/I] 文字列 1 比較演算子 文字列 2 コマンド

文字列1文字列2を比較します。とても単純です。比較演算子の使い方はプログラム言語で使用している様な意味合いに直した方がわかりやすいと思うので、下記を参照して下さい。

EQU - 等しい → 「==」
NEQ - 等しくない → 「!=」
LSS - より小さい → 「<」
LEQ - 以下 → 「<=」
GTR - より大きい → 「>」
GEQ - 以上 → 「>=」

等価と不等価については簡単ですね。LSSやGTRの意味合いが一見すると難しいかもしれませんが、例えば、LSSの場合は「文字列1が文字列2より小さい」という意味を表しています。ちなみに、「文字列1」「文字列2」と記載していますが、「文字列1」「文字列2」が両方とも数値の時には数値比較を実施してくれます。以下の例文の場合を見てみます。

@echo off

if "10" gtr "1" (echo 10は1より大きい)

pause >nul

「文字列1」の部分に数値の10、「文字列2」の部分に数値の1を設定し、比較演算子GTRを使用しています。GTRなので「>」ということです。なので、意味合いとしては「10>1」ということです。もちろん、10は1より大きいのでTrue判定となり、echoコマンドで「10は1より大きい」という表示がコマンドプロンプト上に出力されます。

尚、『/I』は判定する文字列の大文字と小文字の区別をしないで判定します。大文字と小文字の判定はアルファベットだけなので、アルファベットの比較の時に効果を発揮します。例えば、「A」と「a」を区別するかしないかです。

CMDEXTVERSION 番号

これは『ERRORLEVEL 番号』とほぼ同等です。しかしながら、notを使用出来ないので、特に気にして使用することはないと思います。初心者が業務で使う必要が無さそうなので割愛します。

DEFINED 変数

これは『EXIST ファイル名』とほぼ同等です。これもnotを使用出来ません。指定した環境変数が定義されている場合は、その環境変数の値が取得されますが、初心者が業務で使う必要が無さそうなので割愛します。

まとめ

今回はifコマンドの比較演算子を中心に紹介させて頂きました。「help if」でDOS先生に尋ねてもチンプンカンプンの方向けに解説をしたので、CMDEXTVERSIONとDEFINEDの説明は割愛しています。比較演算子はプログラム言語で使用している形を見れば、少しでもイメージがしやすいと思うので、どこかにメモしてifコマンドを使用する時に引っ張り出すのが良いと思います。