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をとる方法について紹介しました。