2011年1月30日日曜日

IF = 条件に一致したら実行する - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。制御文と環境変数
○Windows XP
条件に一致したら実行します。
ELSE を併用すると、一致しない時に別のコマンドを実行する事も出来ます。


**** 書式
--------
if 条件 真の時に実行するコマンド
もしくは
if 条件 ( 真の時に実行するコマンド ) else 偽の時に実行するコマンド
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
o 条件 = 書き方は、下記の通りです。
o 真の時に実行するコマンド = ELSE 以下を付ける時は、丸括弧(= 小括弧)で括ります。
o 偽の時に実行するコマンド = 条件を満たさなかった時に実行するコマンドです。

** 条件の書き方
--------
if [/i] [not] 値1 比較演算子 値2 実行するコマンド
もしくは
if [not] exist ファイル名 実行するコマンド
もしくは
if [not] defined 環境変数名 実行するコマンド
もしくは
if [not] errorlevel 比較する数字 実行するコマンド
もしくは
if [not] cmdextversion 比較する数字 実行するコマンド
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。

(個別説明)
--------
if [/i] [not] 値1 比較演算子 値2 実行するコマンド
--------

o /i = これを付けると、大文字小文字を区別しません。
o not = 否定 = 後続の判定条件を逆にします。
o 比較演算子 = 次の演算子を使用出来ます。
    + == = 文字列として等しい
        + 「=」を2つ並べます。
        + == の前後は、空白が無くても大丈夫です。
    + EQU = 等しい
    + NEQ = 等しくない
    + LSS = より小さい
    + LEQ = 以下
    + GTR = より大きい
    + GEQ = 以上
o 値1 = 空白付きで渡したい時や、値が空になる時は、「"」で括ります。(例: "ミクさん" )
o 値2 = 値1と同様です。
--------
if [not] exist ファイル名 実行するコマンド
--------

o exist = ファイルが存在していたら真
o ファイル名 = 空白付きで渡したい時は、「"」で括ります。(例: "ミクさん" )
--------
if [not] defined 環境変数名 実行するコマンド
--------

o defined = その名前の環境変数が定義されていたら真
--------
if [not] errorlevel 比較する数字 実行するコマンド
--------

o errorlevel = 変数 ERRORLEVEL の値が、比較する数字「以上」なら真
    + 比較する数字と等しいか、比較する数字よりも大きい時に真になります。
    + 比較する数字に指定出来るのは、整数です。負の値も指定出来ます。
    + 詳しくは、「ERRORLEVEL = コマンドの戻り値
--------
if [not] cmdextversion 比較する数字 実行するコマンド
--------

o cmdextversion = コマンド拡張機能のバージョン番号(= 変数 CMDEXTVERSION の値)が、比較する数字「以上」なら真
    + 比較する数字と等しいか、比較する数字よりも大きい時に真になります。
    + 比較する数字に指定出来るのは、0 以上の整数です。
    + Windows XP Service Pack 3の場合、変数 CMDEXTVERSION の値は 2 です。
        + ですので、比較する数字が「0」「1」「2」の時に真になります。
    + IF CMDEXTVERSION 構文は、コマンド拡張機能が無効の時に使用すると、文法エラーになります。
    + ですので、コマンド拡張機能が無効の中でも動かすようにしたい時は、変数「%CMDEXTVERSION%」を使います。


**** 戻り値 ( ERRORLEVELの値。確認分のみ )
o (設定なし) = このコマンドは、ERRORLEVELの値を更新しません。
    + 但し、IF の中で実行するコマンドが ERRORLEVELの値を更新する事があります。


**** 使用例
--------
@echo off
if "MIKUSAN" == "MIKUSAN" echo おはようございます、ミクさん。
if "MIKUSAN" == "mikusan" ( echo ネギ ) else echo おはようございます、ミクさん。

if /i "MIKUSAN"=="mikusan" echo おはようございます、ミクさん。
--------

    + /I オプションを付けると、大文字小文字の区別をしなくなります。
    + 「==」の前後は、空白を入れても入れなくても大丈夫です。
    + 上の例の場合は、「"」で囲まなくても大丈夫です。
        + 条件内で「"」が必要になるのは、比較する値が空の時と、文字列の途中に空白を入れる時です。
    + @echo off は、コマンド内容を表示しないようにするコマンドです。
        + 不要なら、削除して下さい。

o ELSEの書き方は、「ELSE = IFで実行しない時に実行する
o 括弧内の制限事項は、「バッチファイル。IF文やFOR文の中で複数コマンドを書く時の注意点


**** 機能
o 条件に一致したら実行します。ELSE節を追加する事も出来ます。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼Windowsコマンド。制御文と環境変数▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > ELSE = IFで実行しない時に実行する
    ▼FOR = 繰り返し実行する
    GOTO = 指定したラベルに移動する
(2011年2月5日追加。cmdextversion が使えない場面)
(2011年1月30日変更。errorlevelと cmdextversion は「以上」で判定)

ELSE = IFで実行しない時に実行する - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。制御文と環境変数
○Windows XP
先行する IF の条件に一致しなかった時に実行します。
ELSE は、IF コマンドに付随する識別子です。

**** 書式
--------
if 条件 ( 真の時に実行するコマンド ) else 偽の時に実行するコマンド
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。
o 条件 = 書き方は、「IF = 条件に一致したら実行する」の説明をご覧下さい。
o 真の時に実行するコマンド = ELSE 以下を付ける時は、丸括弧(= 小括弧)で括ります。
o 偽の時に実行するコマンド = 条件を満たさなかった時に実行するコマンドです。


**** 使用例
o IF文全部を1行で書く方法
--------
@echo off
if "%1"=="ミクさん" ( echo おはようございます、ミクさん。 ) else echo こんにちは。
--------

    + 「真の時に実行するコマンド」を、丸括弧(= 小括弧)で括ります。
    + 「(」の後ろの空白や「)」の前の空白は、詰めても大丈夫です。
    + 「真の時に実行するコマンド」の中では「)」を使う事が出来ません。全角の「)」なら大丈夫です。
        + ELSE を使う代わりに、GOTO で代用出来ます。
        + 詳しくは、「バッチファイル。IF文やFOR文の中で複数コマンドを書く時の注意点
    + ELSE の後も括弧を使用出来ます。
    + @echo off は、コマンド内容を表示しないようにするコマンドです。
        + 不要なら、削除して下さい。

o 真の時に実行するコマンドを、複数行で書く方法
--------
@echo off
if "%1"=="ミクさん" (
echo おはようございます。ミクさん。
echo 皆さん、おはようございます。
) else echo こんにちは。
--------

    + 「(」までが1行です。
    + IF 文内の最初の空白は、無くても大丈夫です。
    + 括弧内は1行でも大丈夫です。空にすると文法エラーになります。
    + 「else」の前で改行すると、そこで文が終わります = 文法エラーになります。
    + なお、括弧内で、同じ環境変数に対して代入と参照を行う時は、注意が必要です。
    + 詳しくは、「バッチファイル。IF文やFOR文の中で複数コマンドを書く時の注意点

o どちらも括弧を付けて書く方法
--------
@echo off
if "%1"=="ミクさん" (
echo おはようございます。ミクさん。
echo 皆さん、おはようございます。
) else (
echo こんにちは。
)
--------

    + IF 文内の最初の空白は、無くても大丈夫です。
    + 最後の「)」の前は、改行しなくても大丈夫です。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼Windowsコマンド。制御文と環境変数▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > ▼FOR = 繰り返し実行する
    GOTO = 指定したラベルに移動する
    CALL = バッチファイルやラベルを呼び出す