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

Содержание

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.

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

    Ответ от 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. Но на практике чаще используется возможность локального включения данного режима внутри командного файла специальной директивой:

    Setlocal EnableDelayedExpansion

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

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

    )

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

    Весь список команд CMD Windows

  • Основы BAT файлов

    В этой статье:

    • Определение переменных
    • Переменные командной строки (параметры вызова bat-файла)
    • Оператор условия IF
    • Функции
    • Использование возвращаемых значений (обработка кода завершения программы)

    Определение переменных

    SET <Имяпеременной>=<Значениепеременной>

    Оператор SET представляет собой расширение возможностей работы с параметрами в операционной системе. Он задает переменную, значение которой подставляется вместо ее имени при любом использовании этого имени между знаками процента. Так, если задано (переменная, которую требуют многие игры, использующие звуковую карту компьютера):

    SET BLASTER=A220 I5 D1 P330

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

    ECHO %BLASTER%

    на экран будет выведено «A220 I5 D1 P330». Переменные, определенные с помощью оператора SET называются переменными окружения среды (environment) и являются видимыми после выполнения до перезапуска DOS (если не изменять ее вручную в памяти). То есть, ее можно использовать из одного пакетного файла или программы после задания в другом. Наиболее известной является переменная PATH, представляющая собой набор путей для быстрого поиска файлов. Она задается в файле autoexec.bat.

    Переменные командной строки
    (параметры вызова bat-файла)

    %<цифра 0-9>

    Как и в любом языке, в языке пакетных файлов возможно использование переменных, полученных в качестве параметров bat-файла.

    Всего может быть 10 одновременно существующих независимых переменных. Для написания сложных программ это довольно мало, хотя для обычной работы часто хватает и 3-4. Значение переменной равно значению соответствующего параметра из командной строки. Переменная %0 будет содержать имя .bat-файла и, если вы указали, путь к нему. То есть, если вы запустили файл abc.bat со следующими параметрами:

    abc.bat a bc def

    то переменная %0 будет содержать значение abc.bat, %1 будет содержать значение a, %2 будет содержать bc, а %3 — def. Это свойство широко используется для создания универсальных пакетных файлов при работе с повторяющимися операциями.

    Чтобы получить более чем 10 переменных из командной строки, можно воспользоваться командой SHIFT.

    Команда SHIFT позволяет использовать число параметров командной строки далее 10. Однако, при этом теряются соответственно более ранние параметры. Иными словами, команда SHIFT сдвигает все значения переменных на один шаг влево. То есть, переменная %0 будет содержать значение, содержавшееся до этого в переменной %1, а переменная %1 — значение переменной %2 до сдвига. Однако, данная операция является необратимой, то есть, невозможно сдвинуть переменные обратно.

    Оператор условия IF

    К счастью, командный интерпретатор cmd.exe современных ОС Windows 2000 и старше поддерживает блоки команд в конструкциях ветвления, что устраняет необходимость применения IF с метками. Блоки команд заключаются в круглые скобки. Выглядит это так (имитируя C/C++ indentation style):

    if condition (

    rem Команды ветки ‘then’

    rem …

    ) else (

    rem Команды ветки ‘else’

    rem …

    )

    Конкретный пример использования:

    @echo off

    set BUILDMODE=%1

    if «%BUILDMODE%» == «» (

    echo FAIL: Аргумент является обязательным ^(—debug, —release^)

    exit /b 1

    )

    rem Удаляем из аргумента все дефисы для упрощения обработки

    set BUILDMODE=%BUILDMODE:-=%

    if «%BUILDMODE%» == «debug» (

    echo INFO: Устанавливаем debug-режим окружения

    set CCFLAGS=/Od /MDd /Z7

    ) else (

    echo INFO: Устанавливаем release-режим окружения

    set CCFLAGS=/O2 /MD

    )

    На мой взгляд, с этим уже вполне можно жить. Но, как всегда, жизнь не так проста, как кажется. Есть одна проблема. Переменные, использующиеся в блоках then и else, раскрываются перед началом выполнения этих блоков, а не в процессе выполнения. В приведенном примере это не вызывает никаких проблем, однако в следующем вызовет:

    if «%BUILDMODE%» == «debug» (

    echo INFO: Устанавливаем debug-режим окружения

    set OPTFLAGS=/Od

    set CCFLAGS=%OPTFLAGS% /MDd /Z7

    ) else (

    echo INFO: Устанавливаем release-режим окружения

    set OPTFLAGS=/O2

    set CCFLAGS=%OPTFLAGS% /MD

    )

    Загвоздка в том, что в обоих блоках подстановка переменной OPTFLAGS произойдет до того, как она будет изменена в процессе выполнения этого блока. Соответственно, в CCFLAGS будет подставлено то значение, которое OPTFLAGS имела на момент начала выполнения данного if-блока.

    Решается эта проблема путем использования отложенного раскрытия переменных. Переменные, заключенные в !…! вместо %…%, будут раскрыты в их значения только в момент непосредственного использования. Данный режим по умолчанию отключен. Включить его можно либо использованием ключа /V:ON при вызове cmd.exe, либо использованием команды:

    setlocal enabledelayedexpansion

    в тексте самого bat-файла. Второй способ мне представляется более удобным – не очень здорово требовать от кого-то запуска твоего сценария с определенным параметром.

    С учетом сказанного предыдущий «неправильный» пример может быть исправлен так:

    setlocal enabledelayedexpansion

    if «%BUILDMODE%» == «debug» (

    echo INFO: Setting up debug mode environment

    set OPTFLAGS=/Od

    set CCFLAGS=!OPTFLAGS! /MDd /Z7

    ) else (

    echo INFO: Setting up release mode environment

    set OPTFLAGS=/O2

    set CCFLAGS=!OPTFLAGS! /MD

    )

    Вот теперь это почти полноценный if-then-else блок. Почти, потому что если в одной из команд echo у вас встретится закрывающая круглая скобка, то вам необходимо заэкранировать ее символом ^, иначе синтаксический анализатор путается…

    Но в любом случае, это гораздо лучше безумного количества меток и переходов.

    Функции

    А можно создать в bat-файле функцию? Да, можно. Более того, иногда даже нужно. Правда, функциями это можно назвать условно.

    Есть особый синтаксис команды call, который позволяет перейти на метку в этом же bat-файле с запоминанием места, откуда был произведен этот вызов:

    call :метка аргументы

    Возврат из функции производится командой:

    exit /b [опциональный код возврата]

    Ключ /b здесь очень важен: без него будет произведен выход не из функции, а из сценария вообще.

    За подробностями наберите в командной строке:

    call /?

    exit /?

    Что интересно, команда call с таким синтаксисом поддерживает рекурсивные вызовы с автоматическим созданием нового фрейма для переменных аргументов %0-%9. Иногда это может быть полезным. Вот классический пример рекурсивного подсчета факториала на командном языке:

    @echo off

    call :factorial %1

    echo %RESULT%

    exit

    rem Функция для подсчета значения факториала

    rem Вход:

    rem %1 Число, для которого необходимо подсчитать факториал

    rem Выход:

    rem %RESULT% Значение факториала

    :factorial

    if %1 == 0 (

    set RESULT=1

    exit /b

    )

    if %1 == 1 (

    set RESULT=1

    exit /b

    )

    set /a PARAM=%1 — 1

    call :factorial %PARAM%

    set /a RESULT=%1 * %RESULT%

    exit /b

    Пример работы:

    > factorial.bat 10

    3628800

    Использование возвращаемых значений
    (обработка кода завершения программы)

    Любая программа при завершении своей работы возвращает операционной системе код своего завершения. Принято при успешном завершении возвращать ноль, иначе — код ошибки. Иногда, или, вернее, часто, программа «сознательно» возвращает ненулевое значение для того, чтобы в пакетном файле можно было «узнать» некоторые подробности ее работы. Например, программа возвращает код нажатой клавиши, а .bat-файл по нему выполняет различные действия.

    Каким же образом пакетный файл может узнать код завершения выполненной программы? Для этого предусмотрено ключевая переменная ERRORLEVEL.

    Пример пакетного файла с errorlevel’ами:

    @ECHO OFF

    REM Запускаем программу prg1.exe

    PRG1.EXE

    REM Анализ кода завершения

    IF ERRORLEVEL 2 GOTO FILENOTFOUND

    IF ERRORLEVEL 1 GOTO WRITEERROR

    IF ERRORLEVEL 0 GOTO EXITOK

    GOTO ONEXIT

    :FILENOTFOUND

    ECHO Ошибка! Файл не найден!

    GOTO ONEXIT

    :WRITEERROR

    ECHO Ошибка записи!

    GOTO ONEXIT

    :EXITOK

    ECHO Программа завершена благополучно.

    GOTO ONEXIT

    :ONEXIT

    Обратите внимание — анализ кода завершения начинается не с нуля, а с максимально возможного значения. Дело в том, что подобная проверка означает: «если errorlevel больше или равен значению, то…». То есть, если мы будем проверять, начиная с нуля, любое значение будет истинным на первой же строке, что неверно.

    Это самая распространенная ошибка в подобного рода программах.

    Операторы AND / OR в bat файлах

    Бывает, что при написании командного файла (пакетного файла, bat файла, cmd файла) требуется записать в условном операторе IF более сложное условие, составленное с помощью операторов И и ИЛИ.

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

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

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

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

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

    Оператор IF с логическим И (AND) в bat файле

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

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

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

    Пример:

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

    Оператор IF с логическим ИЛИ (OR) в bat файле

    С оператором OR так просто не получится, причем есть разные способы.

    Способ 1 – через последовательные ИЛИ

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

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

    Способ 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 | Microsoft Docs

    • Чтение занимает 3 мин

    В этой статье

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

    СинтаксисSyntax

    if [not] ERRORLEVEL <number> <command> [else <expression>]
    if [not] <string1>==<string2> <command> [else <expression>]
    if [not] exist <filename> <command> [else <expression>]
    

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

    if [/i] <string1> <compareop> <string2> <command> [else <expression>]
    if cmdextversion <number> <command> [else <expression>]
    if defined <variable> <command> [else <expression>]
    

    ПараметрыParameters

    ПараметрParameter ОписаниеDescription
    notnot Указывает, что команда должна выполняться, только если условие имеет значение false.Specifies that the command should be carried out only if the condition is false.
    ERRORLEVEL <number>errorlevel <number> Задает истинное условие, только если предыдущая программа, выполненная 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.
    <command> Указывает команду, которая должна быть выполнена при выполнении предыдущего условия.Specifies the command that should be carried out if the preceding condition is met.
    <string1>==<string2> Задает истинное условие, только если строка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.
    существующие <filename>exist <filename> Указывает истинное условие, если указанное имя файла существует.Specifies a true condition if the specified file name exists.
    <compareop> Задает оператор сравнения из трех букв, включая: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.
    кмдекстверсион <number>cmdextversion <number> Задает истинное условие, только если внутренний номер версии, связанный с компонентом расширения команд 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 <variable>defined <variable> Указывает истинное условие, если переменная определена.Specifies a true condition if variable is defined.
    <expression> Задает команду командной строки и все параметры, которые будут переданы команде в предложении 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:

    if not exist product.dat echo Cannot find data file
    

    Чтобы отформатировать диск в диске а и вывести сообщение об ошибке при возникновении ошибки в процессе форматирования, введите в пакетный файл следующие строки: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:

    :begin
    @echo off
    format a: /s
    if not errorlevel 1 goto end
    echo An error occurred during formatting.
    :end
    echo End of batch program.
    

    Чтобы удалить файл 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:

    IF EXIST Product.dat (
    del Product.dat
    ) ELSE (
    echo The Product.dat file is missing.
    )
    

    Примечание

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

    IF EXIST Product.dat (del Product.dat) ELSE (echo The Product.dat file is missing.)
    

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

    goto answer%errorlevel%
    :answer1
    echo The program returned error level 1
    goto end
    :answer0
    echo The program returned error level 0
    goto end
    :end
    echo Done!
    

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

    if %errorlevel% LEQ 1 goto okay
    

    Дополнительные ссылкиAdditional References

    Урок 5 по CMD — условный оператор if

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

    Условный оператор cmd if содержит практически тот же синтаксис, что и аналогичные конструкции языков VBScript (смотри статью “Урок 5 по VBScript: Условный оператор if…else и select…case”) и Jscript (статья “Урок 8 по JScript: Описание условного оператора if…else, арифметических и логических операторов”) сервера сценариев Windows Script Host.

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

    if условие (оператор1) [else (оператор2)]

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

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

    @echo off
    if "%1"=="1" (echo odin) else (echo dva)

    Как я уже сказал, мы можем использовать не один оператор (командной строки) cmd if, а несколько, посмотрите на данный пример:

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

    Тут, как и прежде идет проверка передаваемого сценарию параметра, если значение равно 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, если да, то идет выполнение второго условно оператора и проверка на значение другого аргумента.

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

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

    @echo off
    if "%1"=="slovo" (echo slovo) else (@if "%1"=="SLOVO" (echo SLOVO) else (echo NOT DATA!!!))

    Тут идет проверка первого аргумента, и регистр строки учитывается, что бы отключить учет регистра при проверке строк, после оператора if нужно прописать ключ /I:

    @echo off
    if /I "%1"=="slovo" (echo slovo) else (if /I "%1"=="SLOVO" (echo SLOVO) else (echo NOT DATA!!!))

    В данном случае, передадим мы строку 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.

    Командная строка — команда 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 заданное_число

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

    команда_для_обработки

    Позволяет задать команду для обработки в том случае, если происходит соблюдение указанных условий.

    строка_№1==строка_№2

    Данный параметр устанавливает требование – условие станет выполняться только в том случае, когда указанные строки будут совпадать друг с другом. Допускается несколько вариантов задания строк, в зависимости от конкретной ситуации.

    exist название_файла

    Данное условие будет выполнено в том случае, когда документ с указанным именем существует.

    оператор_сравнения

    В качестве указанного параметра предусматривается оператор сравнения. Он состоит из трех символов и необходимо сказать о доступных вариантах: EQU (равенство), NEQ (значения не равны между собой), LSS (менее), GTR (более), LEQ (значение является меньшим или равным), GEQ (значение является большим или равным).

    /i

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

    cmdextversion заданное_число

    Требует выполнять равнение между версиями. Здесь предусматривается, что заданное число будет увеличиваться на единицу каждый раз, когда осуществляется внесение крупных корректировок. Таким образом, условие станет выполняться, только когда номер внутренней версии будет равен или превышать указанное значение.

    defined заданная_переменная

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

    команда_и_параметры

    Команда, а также все доступные для неё параметры в ходе обработки в КС, когда работает else.

    Bat условие if. Использование нескольких операторов IF в пакетном файле. Оператор 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 имя_файла. отсутствует

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

    Batch File If Else — Как использовать if else при программировании командных файлов?

    В этом руководстве вы узнаете о структурах принятия решений, которые представляют собой командный файл , если еще операторы .

    В основном логика программирования — это Истина (1) или Ложь (0). Как и любой другой язык программирования, операторы if else в пакетном файле помогают нам сделать выбор между истинным / ложным или несколькими вариантами путем наложения определенного условия.

    Пакетный файл if else statement

    — Синтаксис

      если (условие) что-то
    
    :: Ибо если..else если
    если (условие) (оператор1) еще (оператор2)  

    Итак, как показывает синтаксис, сначала проверяется условие, и если оно истинно, соответствующие операторы выполняются в операторе if пакетного файла. Что касается пакетного файла , если иначе , сначала проверяется условие оператора if, а если оно истинно, выполняется оператор , , иначе выполняется оператор , оператор 2, .

    Пакетный файл, если еще блок-схема

    Вот блок-схема, подчеркивающая концепцию оператора if else .

    Теперь, когда мы узнали, как работает пакетный файл, если еще работает, давайте рассмотрим несколько примеров.

    Пакетный файл, если еще, Пример: проверка целочисленных и строковых переменных

    Чтобы получить более подробную информацию о переменных командного файла, прочтите эту статью.

      НАБОР / A a = 2
    НАБОР / A b = 3
    НАБОР name1 = Aston
    НАБОР name2 = Мартин
    
    :: Использование оператора if
    IF% a% == 2 echo Значение a равно 2
    ЕСЛИ% name2% == Мартин эхо Привет, это Мартин
    
    :: Использование операторов if else
    ЕСЛИ% a% ==% b% (числа эхо-сигналов равны) ИНАЧЕ (номера эхо-сигналов разные)
    IF% name1% ==% name2% (имя эха такое же) ELSE (имя эха другое)
    ПАУЗА  

    Теперь будет получен следующий результат.

    Пакетный файл, если еще пример, чтобы проверить, определена ли переменная или нет

      @ эхо ВЫКЛ.
    
    :: Если var не определен SET var = hello
    ЕСЛИ "% var%" == "" (SET var = Hello)
    
    :: Это можно сделать и таким образом
    ЕСЛИ НЕ ОПРЕДЕЛЕН var (SET var = Hello)
      

    В любом случае он установит var на 'Hello' , поскольку это не определено ранее.

    Пакетный файл, если еще пример, чтобы проверить, существует ли файл или папка

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

      @ эхо ВЫКЛ.
    
    :: Команда EXIST используется для проверки существования
    ЕСЛИ СУЩЕСТВУЕТ D: \ abc.txt, найден ECHO abc.txt
    ЕСЛИ СУЩЕСТВУЕТ D: \ xyz.txt (ECHO xyz.txt найден) ELSE (ECHO xyz.txt не найден)
    
    ПАУЗА  

    Теперь предположим, что у нас есть «abc.txt», на диске D и «xyz.txt» не существует на D :, тогда он сгенерирует следующий вывод.

    Итак, это все о операторах if else для командного файла.Мы надеемся, что вам не составило труда узнать об этом, и надеемся, что к этому времени вы будете знать, как использовать или в сценариях пакетных файлов.



    .

    If — условно выполнить команду — Windows CMD

    If — выполнить команду условно — Windows CMD — SS64.com

    Условно выполнить команду.

      Синтаксис файла 
       ЕСЛИ [НЕ] СУЩЕСТВУЕТ  имя файла команда 
    
       ЕСЛИ [НЕ] СУЩЕСТВУЕТ  имя файла  ( команда ) Иначе ( команда )
    
      Синтаксис строки 
       IF [/ I] [NOT]   item1   ==   item2    command 
    
       IF [/ I]   item1    compare-op    item2    command 
    
       IF [/ I]   item1    compare-op    item2   ( command ) ELSE ( command )
    
      Синтаксис проверки ошибок 
       ЕСЛИ [НЕ] ОПРЕДЕЛЕНА  переменная команда 
    
       ЕСЛИ [НЕ] ERRORLEVEL  номер команды 
    
       IF CMDEXTVERSION  номер команды 
    
      ключ 
         item  Текстовая строка или переменная среды, для более сложных
                   сравнений, переменная может быть изменена с помощью
                   синтаксис подстроки или поиска. команда  Команда для выполнения.
    
         имя_файла  Файл для тестирования или шаблон подстановки.
    
       НЕ выполнять команду, если условие ложно.
    
         ==  выполнить команду, если две строки равны.
    
       / I Делаю нечувствительное к регистру сравнение строк.
    
         compare-op  может быть одним из
                    EQU: равно
                    NEQ: не равно
    
                    LSS: менее <
                    LEQ: меньше или равно <=
    
                    GTR: Больше чем>
                    GEQ: больше или равно> =
    
                    Этот трехзначный синтаксис необходим, поскольку символы> и <
                    символы распознаются как операторы перенаправления 

    IF будет анализировать числа только при использовании одного из (EQU, NEQ, LSS, LEQ, GTR, GEQ).
    Оператор сравнения == всегда приводит к сравнению строк.

    УРОВЕНЬ ОШИБКИ

    Существует два разных метода проверки уровня ошибки, первый синтаксис (IF ERRORLEVEL ...) обеспечивает совместимость с древними пакетными файлами времен Windows 95.
    Второй способ - использовать переменную% ERRORLEVEL%, обеспечивающую совместимость с Windows 2000 или новее.

    IF ERRORLEVEL n операторы следует читать как IF Errorlevel > = number
    я.е.
    IF ERRORLEVEL 0 вернет TRUE независимо от того, является ли уровень ошибки 0, 1 или 5 или 64
    IF ERRORLEVEL 1 вернет TRUE независимо от того, равен ли уровень ошибки 1 или 5 или 64
    IF NOT ERRORLEVEL 1 означает, что ERRORLEVEL меньше 1 (ноль или отрицательный ).
    Это не очень удобно для чтения и использования, а также не учитывает отрицательные числа ошибок.

    Использование переменной% ERRORLEVEL% является более логичным методом проверки уровней ошибок:

    IF% ERRORLEVEL% NEQ 0 Echo Обнаружена ошибка
    IF% ERRORLEVEL% EQU 0 Echo Ошибка обнаружена

    IF% ERRORLEVEL% EQU 0 (Echo Ошибка обнаружена) ELSE (Echo Ошибка обнаружена)
    IF% ERRORLEVEL% EQU 0 Echo Ошибка не обнаружена || Эхо Обнаружена ошибка

    Это позволяет вам перехватывать ошибки, которые могут быть отрицательными числами, вы также можете проверить конкретные ошибки:
    IF% ERRORLEVEL% EQU 64...

    Чтобы намеренно повысить уровень ошибки в пакетном сценарии, используйте команду EXIT / B.

    Возможно (хотя и не лучшая идея) создать строковую переменную с именем% ERRORLEVEL% (пользовательская переменная)
    если такая переменная присутствует, то реальная ERRORLEVEL (системная переменная) не будет использоваться такими командами, как ECHO и IF.

    Проверить, пуста ли переменная

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

    IF [% 1] == [] Значение ECHO отсутствует
    или
    IF [% 1] EQU [] ECHO Value Missing

    При сравнении с переменной, которая может быть пустой, мы включаем пару скобок [], чтобы, если переменная действительно пуста, команде IF все еще есть что сравнить: IF [] EQU [] вернет True.

    Фактически, вы можете использовать для этого почти любой символ: '~', фигурные скобки, {} или даже число 4, но квадратные скобки, как правило, выбираются, потому что они не имеют особого значения.
    При работе с именами файлов / путями вы всегда должны заключать их в кавычки, если% _myvar% содержит "C: \ Some Path", тогда ваше сравнение будет IF ["C: \ Some Path"] EQU []
    если% _myvar% может содержать пустые кавычки, "" тогда ваше сравнение должно быть IF [% _myvar%] EQU [""]

    , если% _myvar% не будет никогда содержать кавычки, тогда вы можете использовать кавычки вместо скобок ЕСЛИ "% _myvar%" EQU ""
    Однако с этим шаблоном, если% _myvar% неожиданно содержит кавычки, вы получите IF "" C: \ Some Path "" EQU "" эти удвоенные кавычки, хотя официально это не задокументировано, так как escape все равно испортит сравнение.

    Проверить, является ли переменная NULL

    В случае переменной, которая может иметь значение NULL - пустая переменная полностью удалит определение переменной, поэтому проверка на NULL станет:

    IF NOT DEFINED _example ECHO Value Missing

    IF DEFINED вернет истину, если переменная содержит любое значение (даже если это просто пробел)

    Чтобы проверить наличие пользовательской переменной, используйте SET VariableName или IF DEFINED VariableName

    Проверить наличие файлов и папок

    ЕСЛИ СУЩЕСТВУЕТ filename Обнаруживает наличие файла или папки.

    Скрипт empty.cmd покажет, пуста папка или нет (регистр не учитывается).

    Круглая скобка

    Круглые скобки можно использовать для разделения команд на несколько строк. Это позволяет писать более сложные команды IF… ELSE…:

     ЕСЛИ СУЩЕСТВУЕТ filename.txt  (
        Эхо при удалении filename.txt
        Del filename.txt
      )  ELSE  (
        Echo Файл не найден.)  

    При объединении оператора ELSE в круглые скобки всегда помещайте открывающую скобку в ту же строку, что и ELSE.
    ) ELSE ( Это связано с тем, что CMD выполняет довольно примитивный однострочный синтаксический анализ команды.

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

    Трубы

    При передаче команд по конвейеру выражение вычисляется слева направо, поэтому

    IF SomeCondition Command1 | Command2 эквивалентно:

    (IF SomeCondition Command1 ) | Команда2
    Канал создается всегда, и всегда выполняется Command2 , независимо от того, является ли SomeCondition ИСТИНА или ЛОЖЬ

    .

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

    IF SomeCondition ( Command1 | Command2 )
    Если условие выполнено, будет запущена команда Command1, и ее выходные данные будут переданы в Command2.

    Команда IF интерпретирует скобки вокруг условия как еще один символ для сравнения (например, # или @), например:
    IF (% _var1% == ( demo Echo переменная _var1 содержит текст демо

    Размещение команды IF с правой стороны канала также возможно, но оболочка CMD содержит ошибки в этой области и может проглотить один из символов-разделителей, что приведет к неожиданным результатам.
    Простой пример, который действительно работает:

    Echo Y | ЕСЛИ красный == синий del *.журнал

    Объединение команд IF (И).

    Единственный логический оператор, напрямую поддерживаемый IF, - это NOT, поэтому для выполнения AND требуется объединение нескольких операторов IF:

     IF  SomeCondition  (
       IF  SomeOtherCondition  (
           Command_if_both_are_true 
       )
    ) 

    Если выполняется одно из условий (ИЛИ)

    Это можно проверить с помощью временной переменной:

    Установить "_tempvar ="
    Если SomeCondition Установить _tempvar = 1
    Если SomeOtherCondition Установить _tempvar = 1
    если% _tempvar% EQU 1 Command_to_run_if_either_is_true

    Разделители

    Если строка, сравниваемая командой IF, включает разделители, такие как [Пробел] или [Запятая], то либо разделители должны быть экранированы с помощью символа вставки ^, либо вся строка должна быть заключена в кавычки.
    Это сделано для того, чтобы оператор IF рассматривал строку как один элемент, а не как несколько отдельных строк.

    Тест Числовые значения

    IF анализирует только номеров , когда используется один из операторов сравнения (EQU, NEQ, LSS, LEQ, GTR, GEQ).
    Оператор сравнения == всегда приводит к сравнению строки .

    Это важное различие, потому что если вы сравниваете числа как строки, это может привести к неожиданным результатам: «2» будет больше «19», а «026» будет меньше «10».

    Правильное числовое сравнение:
    IF 2 GEQ 15 эхо "больше"

    Использование скобок или кавычек вызовет сравнение строк:
    IF (2) GEQ (15) echo "больше"
    IF "2" GEQ "15" echo "больше"

    Это поведение прямо противоположно команде SET / a, где требуются кавычки.

    IF должен работать в полном диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647)

    C: \> if 2147483646 GEQ 2147483647 (Echo Larger) Else (Echo Smaller)
    Меньший ⇨ правильный

    C: \> if 2147483647 GEQ 2147483648 (Echo Larger) Else (Echo Smaller)
    Больше ⇨ неверно из-за переполнения

    C: \> if -2147483649 GEQ -2147483648 (Echo Larger) Else (Echo Smaller)
    Больше ⇨ неверно из-за переполнения

    Вы можете выполнить сравнение строк с очень длинными числами, но это будет работать должным образом, только если числа имеют одинаковую длину:

    C: \> if "2147483647" GEQ "2147483648" (Echo Larger) Else (Echo Smaller)
    Меньший ⇨ правильный

    Подстановочные знаки

    Подстановочные знаки не поддерживаются IF, поэтому% COMPUTERNAME% == SS6 * не будет соответствовать SS64

    Обходной путь - получить подстроку и сравнить только эти символы:
    SET _prefix =% COMPUTERNAME: ~ 0,3%
    IF% _prefix% == SS6 GOTO they_matched

    Если расширения команд отключены, ЕСЛИ будет поддерживать только прямые сравнения: ЕСЛИ ==, ЕСЛИ СУЩЕСТВУЕТ, ЕСЛИ УРОВЕНЬ ОШИБКИ
    также будет отключена системная переменная CMDEXTVERSION.

    IF сам по себе не устанавливает и не сбрасывает уровень ошибки.

    Примеры:

    ЕСЛИ СУЩЕСТВУЕТ C: \ logs \ *. Log (файл журнала эхо-сигналов существует)
    
    ЕСЛИ СУЩЕСТВУЕТ C: \ logs \ install.log (Echo Complete) ELSE (Echo failed)
    
    ЕСЛИ ОПРЕДЕЛЕН _department ECHO Получил переменную _department
    
    ЕСЛИ ОПРЕДЕЛЕН _commission SET / A _salary =% _ salary% +% _commission%
    
    ЕСЛИ CMDEXTVERSION 1 GOTO start_process
    
    IF% ERRORLEVEL% EQU 2 goto sub_problem2 

    IF - внутренняя команда.

    Вы видите вещи; и вы говорите "Почему?" Но я мечтаю о вещах, которых никогда не было; и я говорю: "Почему бы и нет?" ~ Джордж Бернард Шоу

    Связанный:

    Использование скобок для группировки и раскрытия выражений.
    Синтаксис условного выполнения (И / ИЛИ)
    SET - отображение или изменение переменных среды.
    ECHO - Отображение сообщения на экране.
    EXIT - Установить конкретный УРОВЕНЬ ОШИБКИ.
    IFMEMBER - член группы (Ресурсный комплект).
    SC - Служба работает (набор ресурсов).
    Powershell: if - условное выполнение команды.
    Эквивалентная команда bash (Linux): if - условно выполнить команду.


    Авторские права © 1999-2020 SS64.com
    Некоторые права защищены.Код выхода

    - проверьте, была ли команда успешной в пакетном файле

    Переполнение стека
    1. Около
    2. Продукты
    3. Для команд
    1. Переполнение стека Общественные вопросы и ответы
    2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
    3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
    4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
    5. Реклама Обратитесь к разработчикам и технологам со всего мира
    6. О компании

    Загрузка…

    .Пакетный файл

    - если еще цикл в сценарии .bat

    Переполнение стека
    1. Около
    2. Продукты
    3. Для команд
    1. Переполнение стека Общественные вопросы и ответы
    2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
    3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
    4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
    5. Реклама Обратитесь к разработчикам и технологам со всего мира
    6. О компании
    .

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

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