2014年8月21日木曜日

バッチファイル : if 文条件分岐で AND と OR (複数条件指定)

バッチファイルの if 文には、複数条件を指定するための AND と OR が存在しないので、
何らかの工夫をする必要があります。

AND


IF 文を繋げる方法

ELSE 文を使わない場合はこの方法のみで大丈夫です。
IF 条件A IF 条件B (
    処理1
) ELSE (
    処理2(注意!)
)
なぜ注意が必要かというと、この書き方は以下のように解釈されるため、
条件A が FALSE の場合には実行されないからです。
IF 条件A (
    IF 条件B (
        処理1
    ) ELSE (
        処理2(条件1が TRUE で条件2 が FALSE の場合にのみ実行される)
    )
)

環境変数を使う方法(オススメ)

上記の IF 文を繋げる方法を使用しつつ、環境変数を挟むことで ELSE 文を使いやすくします。
一番汎用性が高いと思います。
set TRUE_FALSE=FALSE
IF 条件A IF 条件B set TRUE_FALSE=TRUE
IF %TRUE_FALSE%==TRUE (
    処理1
) ELSE (
    処理2
)

文字列を複数比較する場合には

条件が両方文字列比較の場合は、文字列を繋げた値を比較すると基本的にうまくいきます。
変数の間に「使わない文字」を入れる必要があります。文字を入れないと、例えば期待値AがA、期待値BがBC であった場合、変数AがA で変数BがBCでも、変数AがAB、変数BがCでも真になってしまうからです。
IF 変数A-変数B==期待値A-期待値B (
    処理1
) ELSE (
    処理2
)

OR


環境変数を使う方法

AND の場合と同じく、環境変数を使う方法が素直でわかりやすいです。
set TRUE_FALSE=FALSE
IF 条件A set TRUE_FALSE=TRUE
IF 条件B set TRUE_FALSE=TRUE
IF %TRUE_FALSE%==TRUE (
    処理1
) ELSE (
    処理2
)
条件A は 条件B の ELSE の中に入れたほうが無駄がないのですが、
並列に書いたほうが見やすい気がします。お好みでどうぞ。


AND も OR も環境変数の代わりに goto とラベルを使用しても良いです。

バッチファイル : 改行コードを変数に入れる

0 件のコメント:

コメントを投稿