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

rem Так записать нельзя – это ошибка
if "%var1%" == "value1" and "%var2%" == "value2" ...

Но это не значит, что невозможно реализовать логику AND и OR

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

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

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

Оператор И в bat файле

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

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

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

Пример:

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

Оператор ИЛИ в bat файле

С оператором OR так просто не получится, но выход есть, и даже не один.

Способ 1 – логика ИЛИ через последовательные условия IF

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

В примере ниже значение переменной 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 Условие не выполнено
)

Вместо занесения результата в переменную можно делать переход по GOTO:

if "%a%" == "value1" goto label1
if "%a%" == "value2" goto label1
if "%a%" == "value3" goto label1
echo Условие не выполнено
exit /b 0
:label1
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 Условие не выполнено
)

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

Узнать больше

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

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

Документация

Оператор if в bat файлах

Наши соцсети

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

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

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