Проверка условий в пакетных файлах. Команда IF

Команда IF позволяет в зависимости от выполнения некоторых условий выполнять или не выполнять требуемую команду. Формат команды:

IF условие команда

Здесь команда – это любая допустимая команда (в том числе Goto). Эта команда выполняется, если условие в команде IF истинно, в противном случае команда игнорируется.

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

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

EXIST имя - файла –истинно, если указанный файл существует.

NOT условие–истинно, когда указанное условие ложно.

строка1== строка2 – истинно, если строка1 и строка2 полностью совпадают. Если в этих строках имеются символы %0, %1, %2, …, %9, тогда вместо них подставляются параметры командного файла.

Пример. Создадим командный файл Typ.bat, который выводит указанный как параметр файл на экран. Формат вызова будет: ‘Typ имя-файла’. В этом командном файле нужно проверить, задан ли при вызове параметр и существует ли указанный файл. Командный файл Typ.bat имеет следующий вид:

@Echo off – Отключаем ‘эхо’.
IF -%1 == - goto NoParam – Параметр задан? Если нет, тогда идем на метку NoParam.
IF not exist %1 goto NoFile – Файл существует? Если нет, тогда идем на метку NoFile.
Type %1 – Выводим содержимое файла на экран.
Goto End – Переходим в конец.
:NoParam Echo Задайте параметр! Goto End – Выводим сообщение, что нужно задать параметр, затем переходим в конец.
:NoFile Echo Файл не найден! – Выводим сообщение, что указанный в качестве параметра файл не найден.
:End – Конец командного файла.

Замечание. Коды возврата, которые имеет смысл проверять с помощью команды ‘IF ERRORLEVEL’, возвращают следующие программы MS-DOS: ChkDsk, Choice, Defrag, Deltree, DtskComp, DiskCopy, Find, Format, KeyB, Move, MSAV, Replace, Restore, Scandisk, SetVer и ХСору.

Сравнение с пустой строкой. Используя в команде IF символьные имена параметров %0 - %9 следует проявлять осторожность. Например, сравнение второго параметра командного файла со строкой ‘sss’ не следует делать так:

IF %2 == sss …

Дело в том, что если в командный файл передано меньше двух параметров, тогда все символы %2 в нем будут замещены пустой строкой, и при выполнении команды возникнет ошибка из-за того, что аргумент слева от оператора ‘==’ будет отсутствовать. Правильная команда сравнения должна использовать префикс ‘-’ в аргументах:

IF -%2 == -sss ...

Эта команда работает корректно при любом значении параметра %2.