Бывает, что при написании командного файла (пакетного файла, bat файла, cmd файла) требуется записать в условном операторе IF более сложное условие, составленное с помощью операторов И и ИЛИ.

Как известно, bat файлы не имеют таких логических операторов, поэтому в них нельзя написать конструкции типа:

if "%var1%" == "value1" and %var2% == "value2" ...

Эта статья рассказывает, как в bat файле реализовать логику операторов И / ИЛИ другими доступными способами.

Надо сказать, что всё-таки командные файлы Windows предназначены для пакетного выполнения консольных команд, и задачи по расчету или обработке данных лучше писать в скриптах (PowerShell, WSH / JScript / VBScript), вызывая их из bat файла.

Ссылки для скачивания файлов находятся в конце статьи.

Оператор IF с логическим И (AND) в bat файле

Самый простой вариант – вложенное выполнение двух операторов IF:

if "%var1%" == "value1" if %var2% == "value2" ...

То есть вместо and мы просто пишем if. Можно использовать не только проверку значения переменной, но и проверку наличия файла. Условий может быть больше двух.

Пример:

if "%a%" == "backup" if "%b%" == "true" if not exist "backup.dat" echo Условие выполнено

Оператор IF с логическим ИЛИ (OR) в bat файле

С оператором OR так просто не получится, причем есть разные способы.

Способ 1 – через последовательные ИЛИ

Каждое условие записывается в отдельный IF, каждый из которых заносит результат в общую переменную. В итоге, если было выполнено хотя бы одно из условий, в общей переменной будет этот результат.

В примере ниже значение переменной a сравнивается с тремя значениями, и для любого из value1, value2, value3 условие будет выполнено. А если задать a какое-то другое значение, например, set a=value4, то условие выполнено не будет, что нам и нужно:

if "%a%" == "value1" set res=true
if "%a%" == "value2" set res=true
if "%a%" == "value3" set res=true
if defined res ( 
    echo Условие выполнено
) else (
    echo Условие не выполнено
)

Способ 2 — через И и НЕ

Этот способ основан на том факте, что логическую операцию ИЛИ можно представить через операции И и НЕ, например, a OR b эквивалентно NOT ( NOT A AND NOT B ). Оператор NOT уже есть в bat файлах, а оператор AND можно представить через последовательные IF, как мы видели выше.

Поэтому тот же результат можно получить по-другому:

set res=true
if not "%a%" == "value1" if not "%a%" == "value2" if not "%a%" == "value3" set res=false
if "%res%"=="true" (
    echo Условие выполнено
) else (
    echo Условие не выполнено
)

Этот способ занимает немного меньше строк, чем предыдущий.

Файлы для скачивания

Все файлы, описанные в статье, можно скачать с Яндекс.Диска.

Операторы AND / OR в bat файлах
Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *