Windows batch command if and

IF – оператор условного выполнения команд в командных файлах Windows

Формат командной строки:

IF [NOT] ERRORLEVEL число команда

IF [NOT] строка1==строка2 команда

IF [NOT] EXIST имя_файла команда

NOT — Указывает, что Windows должна выполнить эту команду, только если условие является ложным.

ERRORLEVEL число — Условие является истинным, если код возврата последней выполненной программы не меньше указанного числа.

строка1==строка2 — Условие является истинным, если указанные строки совпадают.

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

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

Предложение ELSE должно располагаться в той же строке, что и команда, следующая за ключевым словом IF. Например:

IF EXIST имя_файла. (
del имя_файла.
) ELSE (
echo имя_файла. missing.
)

Следующий пример содержит ОШИБКУ, поскольку команда del должна заканчиваться переходом на новую строку:

IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. Missing

Следующий пример также содержит ОШИБКУ, поскольку команда ELSE должна располагаться в той же строке, что и команда, следующая за IF:

IF EXIST имя_файла. del имя_файла.
ELSE echo имя_файла. missing
Вот правильный пример, где все команды расположены в одной строке:

IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. Missing

Изменение команды IF при включении расширенной обработки команд:

IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда

где оператор_сравнения принимает следующие значения:

EQU — равно
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,

а ключ /I , если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Сравнения проводятся по общему типу данных, так что если строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа, после чего выполняется сравнение чисел.

Условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но значение сравнивается с внутренним номером версии текущей реализации расширенной обработки команд. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд. Если расширенная обработка команд отключена, условие CMDEXTVERSION никогда не бывает истинно.

Условие DEFINED применяется подобно условию EXIST , но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена.

Строка %ERRORLEVEL% будет развернута в строковое представление текущего значения кода ошибки ERRORLEVEL, за исключением ситуации, когда уже имеется переменная среды с именем ERRORLEVEL; в подобном случае подставляется значение этой переменной. Например, с помощью данной строки можно выполнить следующее:

goto answer%ERRORLEVEL%
:answer0
echo Получен код возврата 0
:answer1
echo Получен код возврата 1

Допускается и применение описанных выше операторов числового сравнения:

IF %ERRORLEVEL% LEQ 1 goto okay

Строка %CMDCMDLINE% будет развернута в исходную командную строку, переданную CMD.EXE до любой обработки, за исключением ситуации, когда уже определена переменная среды с именем CMDCMDLINE; в подобном случае подставляется значение этой переменной.

Строка %CMDEXTVERSION% будет развернута в строку, представляющую собой текущее значение CMDEXTVERSION, за исключением ситуации, когда уже имеется переменная среды с именем CMDEXTVERSION; в подобном случае подставляется значение этой переменной.

Создание пустого файла, имя которого задается параметром командной строки.

Если параметр командной строки не задан, то пользователю выдается сообщение об ошибке.


@echo off
REM Проверить наличие имени файла, задаваемого в качестве параметра %1
REM Если параметр %1 пустой – переход на метку error
if «%1» EQU «» goto error
REM Если параметр задан, создаем пустой файл, копированием из устройства nul
copy nul «%1»
exit
:error
ECHO File name required ! Must be — %

n0 filename.ext
:exit

Командный файл, выполняющий опрос командой ping сетевых адресов в заданном диапазоне ( 192.168.1.1 – 192.168.1.254 ). Команда ping формирует значение переменной ERRORLEVEL равное нулю, если верно заданы параметры командной строки. То есть, определить доступность пингуемого IP-адреса методом анализа кода возврата ping не получится, поскольку он будет нулевым, независимо от того, отвечает ли пингуемое устройство, или нет. Поэтому, для решения данной задачи необходимо определить характерный признак, который присутствует в выводимых результатах только в том случае, когда пингуемое устройство доступно. Таким признаком может быть наличие строки символов «TTL» в выводе команды ping. Для определения признака можно использовать команду find в цепочке с командой ping .

Читайте также:  Windows выдает ошибку версия этого файла несовместима

Примеры вывода для отвечающего и не отвечающего узлов:

Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64 — если устройство с данным IP-адресом доступно;
Превышен интервал ожидания для запроса. — если устройство не отвечает;

Команда find /I «TTL» возвращает код ERRORLEVEL равный 0 , если строка «TTL» присутствует в результате выполнения ping . Ключ /I имеет смысл использовать, чтобы результат не зависил от того, строчные или заглавные символы составляют строку «ttl».
Результат работы командного файла записывается в текстовый файл iplist.txt

@ECHO OFF
REM Постоянная часть IP-адреса
set IPTMP=192.168.1.
REM Количество пингуемых узлов
set N=254
rem С какого адреса начать — начальное значение » хвоста » IP- адреса X.X.X.IPMIN
set /A IPMIN=1
ECHO %DATE% Опрос пингом %N% адресов начиная с %IPTMP%%IPMIN% >> iplist.txt
rem M0 — метка для организации цикла
:M0
rem Переменная IPFULL — полное значение текущего IP-адреса
set IPFULL=%IPTMP%%IPMIN%
rem Если » хвост «больше N – перейти к завершению работы
IF %IPMIN% GTR %N% GOTO ENDJOB
ping -n 1 %IPFULL% | find /I «TTL»
if %ERRORLEVEL%==0 Echo %IPFULL% >> iplist.txt
rem Сформируем следующий IP-адрес
set /A IPMIN=%IPMIN% + 1
rem Перейдем на выполнение следующего шага
GOTO M0
rem Завершение работы
:endjob
exit

Существуют некоторые особенности реализации командного интерпретатора CMD.EXE , которые необходимо учитывать при обработке значений переменных внутри циклов IF и FOR . Использование значений переменных внутри скобок, требует изменения стандартного режима интерпретации командного процессора. Разработчиками предусмотрена возможность запуска CMD.EXE с параметром /V:ON , что включает разрешение отложенного расширения переменных среды с применением символа восклицательного знака ( ! ) в качестве разделителя. То есть, параметр /V:ON разрешает использовать !var! в качестве значения переменной var во время выполнения внутри циклов команд FOR и IF . Но на практике чаще используется возможность локального включения данного режима внутри командного файла специальной директивой:

После чего, можно обрабатывать принимаемые переменными значения внутри цикла, используя вместо знаков процента восклицательные знаки:

FOR … (
IF !ERRORLEVEL!==0 вместо %ERRORLEVEL%==0

)

&nbsp &nbsp В русскоязычной справке команды IF имеется ошибка, которая много лет переходит из версии в версию — вместо оператора EQU — равно , указано EQL — равно

Windows batch command if and

Performs conditional processing in batch programs.

Syntax

If command extensions are enabled, use the following syntax:

Parameters

Parameter Description
not Specifies that the command should be carried out only if the condition is false.
errorlevel Specifies a true condition only if the previous program run by Cmd.exe returned an exit code equal to or greater than number.
Specifies the command that should be carried out if the preceding condition is met.
== Specifies a true condition only if string1 and string2 are the same. These values can be literal strings or batch variables (for example, %1 ). You do not need to enclose literal strings in quotation marks.
exist Specifies a true condition if the specified file name exists.
Specifies a three-letter comparison operator, including:
  • EQU — Equal to
  • NEQ — Not equal to
  • LSS — Less than
  • LEQ — Less than or equal to
  • GTR — Greater than
  • GEQ — Greater than or equal to
/i Forces string comparisons to ignore case. You can use /i on the string1==string2 form of if. These comparisons are generic, in that if both string1 and string2 are comprised of numeric digits only, the strings are converted to numbers and a numeric comparison is performed.
cmdextversion Specifies a true condition only if the internal version number associated with the command extensions feature of Cmd.exe is equal to or greater than the number specified. The first version is 1. It increases by increments of one when significant enhancements are added to the command extensions. The cmdextversion conditional is never true when command extensions are disabled (by default, command extensions are enabled).
defined Specifies a true condition if variable is defined.
Specifies a command-line command and any parameters to be passed to the command in an else clause.
/? Displays help at the command prompt.

Remarks

If the condition specified in an if clause is true, the command that follows the condition is carried out. If the condition is false, the command in the if clause is ignored and the command executes any command that is specified in the else clause.

When a program stops, it returns an exit code. To use exit codes as conditions, use the errorlevel parameter.

If you use defined, the following three variables are added to the environment: %errorlevel%, %cmdcmdline%, and %cmdextversion%.

%errorlevel%: Expands into a string representation of the current value of the ERRORLEVEL environment variable. This variable assumes that there isn’t already an existing environment variable with the name ERRORLEVEL. If there is, you’ll get that ERRORLEVEL value instead.

%cmdcmdline%: Expands into the original command line that was passed to Cmd.exe prior to any processing by Cmd.exe. This assumes that there isn’t already an existing environment variable with the name CMDCMDLINE. If there is, you’ll get that CMDCMDLINE value instead.

%cmdextversion%: Expands into the string representation of the current value of cmdextversion. This assumes that there isn’t already an existing environment variable with the name CMDEXTVERSION. If there is, you’ll get that CMDEXTVERSION value instead.

You must use the else clause on the same line as the command after the if.

Examples

To display the message Cannot find data file if the file Product.dat cannot be found, type:

To format a disk in drive A and display an error message if an error occurs during the formatting process, type the following lines in a batch file:

To delete the file Product.dat from the current directory or display a message if Product.dat is not found, type the following lines in a batch file:

These lines can be combined into a single line as follows:

To echo the value of the ERRORLEVEL environment variable after running a batch file, type the following lines in the batch file:

To go to the okay label if the value of the ERRORLEVEL environment variable is less than or equal to 1, type:

if if

Выполняет условную обработку в пакетных программах. Performs conditional processing in batch programs.

Синтаксис Syntax

Если расширения команд включены, используйте следующий синтаксис: If command extensions are enabled, use the following syntax:

Параметры Parameters

Параметр Parameter Описание Description
not not Указывает, что команда должна выполняться, только если условие имеет значение false. Specifies that the command should be carried out only if the condition is false.
ERRORLEVEL errorlevel Задает истинное условие, только если предыдущая программа, выполненная Cmd.exe, вернула код выхода, который больше или равен Number. Specifies a true condition only if the previous program run by Cmd.exe returned an exit code equal to or greater than number.
Указывает команду, которая должна быть выполнена при выполнении предыдущего условия. Specifies the command that should be carried out if the preceding condition is met.
== Задает истинное условие, только если строка1 и строка2 совпадают. Specifies a true condition only if string1 and string2 are the same. Эти значения могут быть строками литерала или пакетными переменными (например, %1 ). These values can be literal strings or batch variables (for example, %1 ). Литеральные строки не нужно заключать в кавычки. You do not need to enclose literal strings in quotation marks.
существующие exist Указывает истинное условие, если указанное имя файла существует. Specifies a true condition if the specified file name exists.
Задает оператор сравнения из трех букв, включая: Specifies a three-letter comparison operator, including:
  • Равно — равно EQU — Equal to
  • Нек — не равно NEQ — Not equal to
  • ЛСС — меньше LSS — Less than
  • LEQ -меньше или равно LEQ — Less than or equal to
  • ГТР — больше GTR — Greater than
  • Жек — больше или равно GEQ — Greater than or equal to
/i /i Принудительное сравнение строк не учитывает регистр. Forces string comparisons to ignore case. Параметр /i можно использовать в string1==string2 формате If. You can use /i on the string1==string2 form of if. Эти сравнения являются универсальными, в том случае, если и строка1 , и строка2 состоят из цифр, строки преобразуются в числа и выполняется числовое сравнение. These comparisons are generic, in that if both string1 and string2 are comprised of numeric digits only, the strings are converted to numbers and a numeric comparison is performed.
кмдекстверсион cmdextversion Задает истинное условие, только если внутренний номер версии, связанный с компонентом расширения команд Cmd.exe, равен или больше указанного числа. Specifies a true condition only if the internal version number associated with the command extensions feature of Cmd.exe is equal to or greater than the number specified. Первая версия — 1. The first version is 1. Он увеличивается на единицу при добавлении значительных улучшений в расширения команд. It increases by increments of one when significant enhancements are added to the command extensions. Кмдекстверсион Conditional не имеет значения true, если расширения команд отключены (по умолчанию расширения команд включены). The cmdextversion conditional is never true when command extensions are disabled (by default, command extensions are enabled).
defined defined Указывает истинное условие, если переменная определена. Specifies a true condition if variable is defined.
Задает команду командной строки и все параметры, которые будут переданы команде в предложении else . Specifies a command-line command and any parameters to be passed to the command in an else clause.
/? /? Отображение справки в командной строке. Displays help at the command prompt.

Комментарии Remarks

Если условие, указанное в предложении If , имеет значение true, выполняется команда, следующая за условием. Если условие имеет значение false, команда в предложении If игнорируется и команда выполняет любую команду, указанную в предложении else . If the condition specified in an if clause is true, the command that follows the condition is carried out. If the condition is false, the command in the if clause is ignored and the command executes any command that is specified in the else clause.

Когда программа останавливается, она возвращает код выхода. When a program stops, it returns an exit code. Чтобы использовать коды выхода в качестве условий, используйте параметр ERRORLEVEL . To use exit codes as conditions, use the errorlevel parameter.

При использовании определенного значения в среду добавляются следующие три переменные: % ERRORLEVEL%, % кмдкмдлине% и % кмдекстверсион%. If you use defined, the following three variables are added to the environment: %errorlevel%, %cmdcmdline%, and %cmdextversion%.

% ERRORLEVEL%: разворачивается в строковое представление текущего значения переменной среды ERRORLEVEL. %errorlevel%: Expands into a string representation of the current value of the ERRORLEVEL environment variable. Эта переменная предполагает, что отсутствует существующая переменная среды с именем ERRORLEVEL. This variable assumes that there isn’t already an existing environment variable with the name ERRORLEVEL. Если это так, вместо него будет получено значение ERRORLEVEL. If there is, you’ll get that ERRORLEVEL value instead.

% кмдкмдлине%: разворачивается в исходную командную строку, которая была передана Cmd.exe до любой обработки Cmd.exe. %cmdcmdline%: Expands into the original command line that was passed to Cmd.exe prior to any processing by Cmd.exe. Предполагается, что отсутствует существующая переменная среды с именем КМДКМДЛИНЕ. This assumes that there isn’t already an existing environment variable with the name CMDCMDLINE. Если это так, вы получите вместо этого значение КМДКМДЛИНЕ. If there is, you’ll get that CMDCMDLINE value instead.

% кмдекстверсион%: разворачивается в строковое представление текущего значения кмдекстверсион. %cmdextversion%: Expands into the string representation of the current value of cmdextversion. Предполагается, что отсутствует существующая переменная среды с именем КМДЕКСТВЕРСИОН. This assumes that there isn’t already an existing environment variable with the name CMDEXTVERSION. Если это так, вы получите вместо этого значение КМДЕКСТВЕРСИОН. If there is, you’ll get that CMDEXTVERSION value instead.

Предложение else необходимо использовать в той же строке, что и команда после оператора If. You must use the else clause on the same line as the command after the if.

Примеры Examples

Чтобы отобразить сообщение не удается найти файл данных если не удается найти файл Product. dat, введите: To display the message Cannot find data file if the file Product.dat cannot be found, type:

Чтобы отформатировать диск в диске а и вывести сообщение об ошибке при возникновении ошибки в процессе форматирования, введите в пакетный файл следующие строки: To format a disk in drive A and display an error message if an error occurs during the formatting process, type the following lines in a batch file:

Чтобы удалить файл Product. dat из текущего каталога или отобразить сообщение, если Product. dat не найден, введите в пакетном файле следующие строки: To delete the file Product.dat from the current directory or display a message if Product.dat is not found, type the following lines in a batch file:

Эти строки можно объединить в одну строку следующим образом: These lines can be combined into a single line as follows:

Чтобы вывести значение переменной среды ERRORLEVEL после выполнения пакетного файла, введите в пакетный файл следующие строки: To echo the value of the ERRORLEVEL environment variable after running a batch file, type the following lines in the batch file:

Чтобы вернуться к метке «хорошо», если значение переменной среды ERRORLEVEL меньше или равно 1, введите: To go to the okay label if the value of the ERRORLEVEL environment variable is less than or equal to 1, type:

Читайте также:  Realtek 8822be драйвер windows 10
Оцените статью