Основы BAT файлов. Использование нескольких операторов IF в пакетном файле

Обработка условий в пакетных программах.

Синтаксис

if [not ] errorlevel число команда [ else выражение ]

if [not ] строка1 == строка2 команда [ else выражение ]

if [not ] exist имя_файла команда [ else выражение ]

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

if [/i ] строка1 оп_сравнения строка2 команда [else выражение ]

if cmdextversion число команда [else выражение ]

if defined переменная команда [else выражение ]

Параметры

not Задает выполнение команды только в случае невыполнения условия. errorlevel число Условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа . команда Команда, которая должна быть обработана в случае выполнения условия. строка1 == строка2 Условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1 ). Явно заданные строки нет необходимости заключать в кавычки. exist имя_файла Условие выполняется, если существует файл с именем имя_файла . оп_сравнения Трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения . /i Сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1 == string2 команды if . Эти сравнения являются общими. Если и строка1 , и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел. cmdextversion число Условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа . первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены). defined переменная Условие выполняется, если переменная определена. выражение Команда и все ее параметры для обработке в командной строке при выполнении оператора else . /? Отображение справки в командной строке.

Заметки

  • Если условие, заданное в команде if , выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if , пропускается, а управление переходит к команде оператора else , если она задана.
  • Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.
  • Использование команды defined переменная

    При использовании команды defined переменная добавляются следующие три переменные: %errorlevel% , %cmdcmdline% и %cmdextversion% .

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

    goto answer%errorlevel%
    :answer0
    echo Код возврата программы равен 0
    :answer1
    echo Код возврата программы равен 1
    goto end
    :end
    echo Готово!

    Операторы сравнения оп_сравнения также можно использовать следующим образом:

    If %errorlevel% LEQ 1 goto okay

    %cmdcmdline% замещается исходной командной строкой, переданной Cmd.exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline . В этом случае будет использовано значение cmdcmdline .

    %cmdextversion% замещается строковым представлением текущего значения cmdextversion , если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.

  • Использование оператора else

    Оператор else должен размещаться в той же строке, что и команда if . Пример:

    IF EXIST имя_файла. (del имя_файла.) ELSE (echo имя_файла. отсутствует.)

    del должна заканчиваться новой строкой:

    IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует

    Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if :

    IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует

    Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:

    IF EXIST имя_файла (del имя_файла) ELSE echo имя_файла отсутствует

Примеры

Если файл Product.dat не удается найти, появится следующее сообщение:

if not exist product.dat echo Не найден файл данных

Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:

:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo Ошибка при форматировании.
:end
echo Конец пакетной программы.

Если ошибка не возникнет, сообщение об ошибке выведено не будет.

Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:

if exist c:mydir\nul goto process

Обработка условий в пакетных программах.

Синтаксис

if [not ] errorlevel число команда [ else выражение ]

if [not ] строка1 == строка2 команда [ else выражение ]

if [not ] exist имя_файла команда [ else выражение ]

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

if [/i ] строка1 оп_сравнения строка2 команда [else выражение ]

if cmdextversion число команда [else выражение ]

if defined переменная команда [else выражение ]

Параметры

not Задает выполнение команды только в случае невыполнения условия. errorlevel число Условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа . команда Команда, которая должна быть обработана в случае выполнения условия. строка1 == строка2 Условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1 ). Явно заданные строки нет необходимости заключать в кавычки. exist имя_файла Условие выполняется, если существует файл с именем имя_файла . оп_сравнения Трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения . /i Сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1 == string2 команды if . Эти сравнения являются общими. Если и строка1 , и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел. cmdextversion число Условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа . первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены). defined переменная Условие выполняется, если переменная определена. выражение Команда и все ее параметры для обработке в командной строке при выполнении оператора else . /? Отображение справки в командной строке.

Заметки

  • Если условие, заданное в команде if , выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if , пропускается, а управление переходит к команде оператора else , если она задана.
  • Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.
  • Использование команды defined переменная

    При использовании команды defined переменная добавляются следующие три переменные: %errorlevel% , %cmdcmdline% и %cmdextversion% .

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

    goto answer%errorlevel%
    :answer0
    echo Код возврата программы равен 0
    :answer1
    echo Код возврата программы равен 1
    goto end
    :end
    echo Готово!

    Операторы сравнения оп_сравнения также можно использовать следующим образом:

    If %errorlevel% LEQ 1 goto okay

    %cmdcmdline% замещается исходной командной строкой, переданной Cmd.exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline . В этом случае будет использовано значение cmdcmdline .

    %cmdextversion% замещается строковым представлением текущего значения cmdextversion , если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.

  • Использование оператора else

    Оператор else должен размещаться в той же строке, что и команда if . Пример:

    IF EXIST имя_файла. (del имя_файла.) ELSE (echo имя_файла. отсутствует.)

    del должна заканчиваться новой строкой:

    IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует

    Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if :

    IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. отсутствует

    Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:

    IF EXIST имя_файла (del имя_файла) ELSE echo имя_файла отсутствует

Примеры

Если файл Product.dat не удается найти, появится следующее сообщение:

if not exist product.dat echo Не найден файл данных

Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:

:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo Ошибка при форматировании.
:end
echo Конец пакетной программы.

Если ошибка не возникнет, сообщение об ошибке выведено не будет.

Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:

if exist c:mydir\nul goto process

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

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

Условный оператор cmd if содержит практически тот же синтаксис, что и аналогичные конструкции языков VBScript (смотри статью “ ”) и Jscript (статья “ ”) сервера сценариев .

Оператор if командная строка

if условие (оператор1)

Вначале идет проверка условия, если оно выполняется, идет переход к выполнению оператора1, если нет – к оператору2. Если после ключевого слова if прописать not (if not) , то: произойдет проверка условия, если оно не выполниться – переход к оператору1, если условие выполняется – переход к оператору2. Использование круглых скобок не является обязательным, но если вам нужно после проверки условия выполнить сразу несколько операторов cmd if, то круглые скобки необходимы.

Давайте откроем редактор notepad++ и пропишем в нем такой код:

Тут, как и прежде идет проверка передаваемого сценарию параметра, если значение равно 1, то произойдет последовательное выполнение трех команд:

  • hostname – выводит имя компьютера
  • ver – выводит версию ОС
  • ipconfig /all – выводит настройки сети

Для последовательного выполнения команд мы использовали знак конкатенации (объединения) “&”. При невыполнении условия произойдет вызов утилиты netstat .

Что бы проверить существование переменной, используются операторы if defined (если переменная существует) и if not defined (если переменная не существует):

@ echo off set Var1 =100 if defined Var1 (echo % Var1% ) set Var1 = if not defined Var1 (echo NOT EXIST!!! Var1)

Если вы запустите на выполнение данный код, то в окне командной строки будут выведены две строки:

100
NOT EXIST!!! Var1

Вначале, в сценарии происходит создание переменной Var1 и присвоение ей значения 100, далее идет проверка: если переменная Var1 существует, вывести ее значение. Потом мы удаляем переменную и снова запускаем проверку: если переменная Var1 не существует, вывести строку NOT EXIST!!! Var1.

Мы вправе использовать условный оператор if как вложенный:

@ echo off if "%1" =="1" (@ if "%2" =="2" (hostname & ver) else (ver) ) else (hostname & ver & netstat -a)

В данном примере, первый оператор командной строки if проверяет, равен ли первый аргумент 1, если да, то идет выполнение второго условно оператора и проверка на значение другого аргумента.

Обратите внимание!!! Все переменные определяются как строки. При проверке условия я заключал имена переменных и значений в двойные кавычки, это позволяет избежать ошибок, так как параметры или аргументы могут содержать пробелы, или же у переменной может и вовсе отсутствовать значение.

Давайте теперь посмотрим на такой пример:

В данном случае, передадим мы строку SLOVO, slovo, SloVo и так далее, все ровно на экран консоли выведется строка “slovo”, так как учет регистра знаков будет отключен.

Оператор if командная строка, операторы сравнения

Кроме оператора сравнения “==” можно использовать и другие операторы для проверки условия:

  • equ «Равно». Дает True, если значения равны
  • neq «Не равно». Дает True, если значения не равны
  • lss «Меньше». Дает True, если зпачение1 меньше, чем значение2
  • lcq «Меньше или равно». Дает True, если значепие1 равно или меньше, чемзначение2
  • gtr «Больше». Дает True, если значение1 больше, чем значение2
  • geq «Больше или равно». Дает True, если значепие1 равно или больше, чем значение2

В этой статье мы рассмотрели условный оператор командной строки if.

The next decision making statement is the If/else statement. Following is the general form of this statement.

If (condition) (do_something) ELSE (do_something_else)

The general working of this statement is that first a condition is evaluated in the ‘if’ statement. If the condition is true, it then executes the statements thereafter and stops before the else condition and exits out of the loop. If the condition is false, it then executes the statements in the else statement block and then exits the loop. The following diagram shows the flow of the ‘if’ statement.

Checking Variables

Just like the ‘if’ statement in Batch Script, the if-else can also be used for checking variables which are set in Batch Script itself. The evaluation of the ‘if’ statement can be done for both strings and numbers.

Checking Integer Variables

The following example shows how the ‘if’ statement can be used for numbers.

@echo off SET /A a = 5 SET /A b = 10 SET /A c = %a% + %b% if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value") if %c%==10 (echo "The value of variable c is 10") else (echo "Unknown value")

    Each ‘if else’ code is placed in the brackets (). If the brackets are not placed to separate the code for the ‘if and else’ code, then the statements would not be valid proper if else statements.

    In the first ‘if else’ statement, the if condition would evaluate to true.

    In the second ‘if else’ statement, the else condition will be executed since the criteria would be evaluated to false.

"The value of variable c is 15" "Unknown value"

Checking String Variables

The same example can be repeated for strings. The following example shows how the ‘if else’ statement can be used to strings.

@echo off SET str1 = String1 SET str2 = String2 if %str1%==String1 (echo "The value of variable String1") else (echo "Unknown value") if %str2%==String3 (echo "The value of variable c is String3") else (echo "Unknown value")

The key thing to note about the above program is −

    The first ‘if’ statement checks if the value of the variable str1 contains the string “String1”. If so, then it echo’s a string to the command prompt.

    Since the condition of the second ‘if’ statement evaluates to false, the echo part of the statement will not be executed.

The above command produces the following output.

"The value of variable String1" "Unknown value"

Checking Command Line Arguments

The ‘if else’ statement can also be used for checking of command line arguments. The following example show how the ‘if’ statement can be used to check for the values of the command line arguments.

@echo off echo %1 echo %2 echo %3 if %1%==1 (echo "The value is 1") else (echo "Unknown value") if %2%==2 (echo "The value is 2") else (echo "Unknown value") if %3%==3 (echo "The value is 3") else (echo "Unknown value")

If the above code is saved in a file called test.bat and the program is executed as

Test.bat 1 2 4

Following will be the output of the above program.

1 2 4 "The value is 1" "The value is 2" "Unknown value"

if defined

A special case for the ‘if’ statement is the "if defined", which is used to test for the existence of a variable. Following is the general syntax of the statement.

If defined somevariable somecommand

Following is an example of how the ‘if defined’ statement can be used.

@echo off SET str1 = String1 SET str2 = String2 if defined str1 echo "Variable str1 is defined" if defined str3 (echo "Variable str3 is defined") else (echo "Variable str3 is not defined")

The above command produces the following output.

"Variable str1 is defined" "Variable str3 is not defined"

if exists

Another special case for the ‘if’ statement is the "if exists ", which is used to test for the existence of a file. Following is the general syntax of the statement.

If exist somefile.ext do_something

Following is an example of how the ‘if exists’ statement can be used.

@echo off if exist C:\set2.txt echo "File exists" if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")

Let’s assume that there is a file called set2.txt in the C drive and that there is no file called set3.txt. Then, following will be the output of the above code.

"File exists" "File does not exist"

batch_script_decision_making.htm