バッチファイルでIFの条件式のANDをとる方法

バッチファイル

IFの条件式において、複数の条件が同時に真であるかどうかを判断する必要がある場合、プログラミング言語では「AND演算」を使用します。しかし、バッチファイルのIFコマンドでは直接的なAND演算子は提供されていません。

この記事では、バッチファイルにおいてIF条件式でAND演算を実現する方法について紹介します。

サンプルコード1:IFのネスト

IFをネストして、どちらも真なら処理を行う方法です。

@echo off

rem ユーザ入力
set /p var1="条件1を満たしていますか?(y/n): "
set /p var2="条件2を満たしていますか?(y/n): "

rem 判定 ★
if "%var1%"=="y" (
    if "%var2%"=="y" (
        echo 両方の条件が満たされました。
    )
)

pause

サンプルコード2:IF文を続けて書く

こちらもネストの一種ですが、複数条件を1行に収めることができるので、処理をすっきりと記述できるのが良い点です。ただし、後述しますが注意すべき点もあります

@echo off

rem ユーザ入力
set /p var1="条件1を満たしていますか?(y/n): "
set /p var2="条件2を満たしていますか?(y/n): "

rem 判定 ★
if "%var1%"=="y" if "%var2%"=="y" (
    echo 両方の条件が満たされました。
)

pause

注意すべき点

この書き方で、以下のようにelseを記述すると、期待通りに動作しないので注意が必要です。

@echo off

rem ユーザ入力
set /p var1="条件1を満たしていますか?(y/n): "
set /p var2="条件2を満たしていますか?(y/n): "

rem 判定
if "%var1%"=="y" if "%var2%"=="y" (
    echo 両方の条件が満たされました。
) else (
    echo 条件が満たさませんでした。
)

pause

実行結果1:期待通り

条件1を満たしていますか?(y/n): y
条件2を満たしていますか?(y/n): y
両方の条件が満たされました。
続行するには何かキーを押してください . . .

実行結果2:期待通り

条件1を満たしていますか?(y/n): y
条件2を満たしていますか?(y/n): n
条件が満たさませんでした。
続行するには何かキーを押してください . . .

実行結果3:期待と異なる(結果が表示されない)

条件1を満たしていますか?(y/n): n
条件2を満たしていますか?(y/n): y
続行するには何かキーを押してください . . .

上記、実行結果3のように、if文のelse側が実行されない原因は、このバッチファイルが実際は、以下のように解釈されているためです。

@echo off

rem ユーザ入力
set /p var1="条件1を満たしていますか?(y/n): "
set /p var2="条件2を満たしていますか?(y/n): "

rem 判定
if "%var1%"=="y" (
    if "%var2%"=="y" (
        echo 両方の条件が満たされました。
    ) else (
        echo 条件が満たさませんでした。
    )
)

pause

最初のif文の条件式が偽になると、その場合のelse処理は存在しないので、実行結果3のように何も表示されない現象が発生します。

まとめ

本記事では、バッチファイルのIFにおいて、複数の条件のANDをとる方法について紹介しました。

タイトルとURLをコピーしました