Как известно, 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 Условие не выполнено
)
Этот способ занимает немного меньше строк, чем предыдущий.
Узнать больше
Файлы для скачивания
Все файлы, описанные в статье, можно скачать с Яндекс.Диска.