if | Microsoft Learn
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 3 мин
Выполняет условную обработку в пакетных программах.
Синтаксис
if [not] ERRORLEVEL <number> <command> [else <expression>] if [not] <string1>==<string2> <command> [else <expression>] if [not] exist <filename> <command> [else <expression>]
Если расширения команд включены, используйте следующий синтаксис:
if [/i] <string1> <compareop> <string2> <command> [else <expression>] if cmdextversion <number> <command> [else <expression>] if defined <variable> <command> [else <expression>]
Параметры
Параметр | Описание |
---|---|
not | Указывает, что команда должна выполняться, только если условие имеет значение false. |
ERRORLEVEL <number> | Задает истинное условие, только если предыдущая программа, выполненная Cmd.exe, вернула код выхода, который больше или равен Number. |
<command> | Указывает команду, которая должна быть выполнена при выполнении предыдущего условия.![]() |
<string1>==<string2> | Задает истинное условие, только если строка1 и строка2 совпадают. Эти значения могут быть строками литерала или пакетными переменными (например, %1 ). Литеральные строки не нужно заключать в кавычки. |
существующие <filename> | Указывает истинное условие, если указанное имя файла существует. |
<compareop> | Задает оператор сравнения из трех букв, включая:
|
/i | Принудительное сравнение строк не учитывает регистр. Параметр /i можно использовать в формате If. Эти сравнения являются универсальными, в том случае, если и строка1 , и строка2 состоят из цифр, строки преобразуются в числа и выполняется числовое сравнение.![]() |
кмдекстверсион <number> | Задает истинное условие, только если внутренний номер версии, связанный с компонентом расширения команд Cmd.exe, равен или больше указанного числа. Первая версия — 1. Он увеличивается на единицу при добавлении значительных улучшений в расширения команд. Кмдекстверсион Conditional не имеет значения true, если расширения команд отключены (по умолчанию расширения команд включены). |
defined <variable> | Указывает истинное условие, если переменная определена. |
<expression> | Задает команду командной строки и все параметры, которые будут переданы команде в предложении else . |
/? | Отображение справки в командной строке. |
Если условие, указанное в предложении If , имеет значение true, выполняется команда, следующая за условием.
Если условие имеет значение false, команда в предложении If игнорируется и команда выполняет любую команду, указанную в предложении else .
Когда программа останавливается, она возвращает код выхода. Чтобы использовать коды выхода в качестве условий, используйте параметр
При использовании определенногозначения в среду добавляются следующие три переменные: % ERRORLEVEL%, % кмдкмдлине%и % кмдекстверсион%.
% ERRORLEVEL%: разворачивается в строковое представление текущего значения переменной среды ERRORLEVEL. Эта переменная предполагает, что отсутствует существующая переменная среды с именем ERRORLEVEL. Если это так, вместо него будет получено значение ERRORLEVEL.
% кмдкмдлине%: разворачивается в исходную командную строку, которая была передана Cmd.exe до любой обработки Cmd.
exe. Предполагается, что отсутствует существующая переменная среды с именем КМДКМДЛИНЕ. Если это так, вы получите вместо этого значение КМДКМДЛИНЕ.
% кмдекстверсион%: разворачивается в строковое представление текущего значения кмдекстверсион. Предполагается, что отсутствует существующая переменная среды с именем КМДЕКСТВЕРСИОН. Если это так, вы получите вместо этого значение КМДЕКСТВЕРСИОН.
Предложение else необходимо использовать в той же строке, что и команда после оператора If.
Примеры
Чтобы отобразить сообщение не удается найти файл данных если не удается найти файл Product. dat, введите:
if not exist product.dat echo Cannot find data 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 не найден, введите в пакетном файле следующие строки:
IF EXIST Product.dat ( del Product.dat ) ELSE ( echo The Product.dat file is missing. )
Примечание
Эти строки можно объединить в одну строку следующим образом:
IF EXIST Product.dat (del Product.dat) ELSE (echo The Product.dat file is missing.)
Чтобы вывести значение переменной среды ERRORLEVEL после выполнения пакетного файла, введите в пакетный файл следующие строки:
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, введите:
if %errorlevel% LEQ 1 goto okay
Дополнительные ссылки
Условные обозначения синтаксиса команд командной строки
GOTO, команда
Условный оператор IF — как грамотно оформить код | SafeZone
Кирилл
- #1
А если исходя из переменной мне нужно выполнить определенный call?
Тогда просто используем set ==результат,и запуск команды верно?
А можно пример кода с комментарием?
А вот такой блок будет работать:
(прошу не обращать внимание на ошибки -это пример)
if %test%=result ( тут блок команд (тут скрипт vbs) ) else echo error...
Click to read more…
Последнее редактирование:
Dragokas
Angry & Scary Developer
- #2
Koza Nozdri, видел твои коды.
Очень красивы, но Имхо, бессмысленны с точки зрения отладки ошибок и понимания логики переходов по условиям.
Очень рекомендую множество вложенных условий формировать по уровням,
как это делается на ЯВУ (языках высокого уровня).
Иначе, большая вероятность, потерять скобку.
if "%test%"=="result" ( тут блок команд if "%A%"=="%B%" ( тут скрипт vbs ) else ( echo error... ) ) else ( echo test не равнялся result )
Т.е. простейший IF для строк (с игнорированием регистра букв — ключ /i ) будет:
if /i "%A%"=="%B%" ( echo Удача ) else ( echo Неудача )
Для оператора возврата кода ошибки:
:: генерируем произвольный код ошибки cmd /c Exit /B 1 if errorlevel 1 ( echo Была ошибка ) else echo Не было ошибок )
Оператор errorlevel 1 — означает что мы сравниваем %errorlevel% с 1. Если код ошибки >= 1, то условие выполняется (true).Для логического сравнения чисел кавычки убираем:
@echo off set X=1 set Y=2 if %Y% GTR %X% ( echo Y больше X ) else ( echo Y меньше, либо равен X )
Справка if /?
EQL — равно (или просто знак == )
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,Не забывай, что:
= это знак присвоения. Работает только с Set.
== это знак сравнения. Работает в операторе IF.Посмотри в коде Рекурсивный Dir /X (под спойлером) на сколько хорошо прослеживается логика вложенных условий.
Последнее редактирование:
если | Microsoft Узнайте
Обратная связь Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 3 минуты на чтение
Выполняет условную обработку в пакетных программах.
Синтаксис
if [not] ERRORLEVEL[else ] if [not] == [else ] если [не] существует <имя файла> <команда> [иначе <выражение>]
Если включены расширения команд, используйте следующий синтаксис:
if [/i][else ] if cmdextversion <число> <команда> [else <выражение>] если определено <переменная> <команда> [иначе <выражение>]
Параметры
Параметр | Описание |
---|---|
не | Указывает, что команду следует выполнять только в том случае, если условие ложно. |
уровень ошибки <число> | Указывает истинное условие, только если предыдущая программа, запущенная Cmd.exe, вернула код выхода, равный или превышающий число . |
<команда> | Указывает команду, которая должна быть выполнена, если выполнено предыдущее условие.![]() |
<строка1>==<строка2> | Указывает истинное условие, только если string1 и string2 одинаковы. Эти значения могут быть литеральными строками или пакетными переменными (например, %1 ). Вам не нужно заключать литеральные строки в кавычки. |
существует <имя файла> | Указывает истинное условие, если файл с указанным именем существует. |
<сравнение> | Задает трехбуквенный оператор сравнения, включая:
|
/я | Игнорирует регистр при сравнении строк. Вы можете использовать /i в форме string1==string2 if .![]() |
cmdextversion <номер> | Указывает истинное условие, только если внутренний номер версии, связанный с функцией расширений команд Cmd.exe, равен или превышает указанный номер. Первая версия — 1. Она увеличивается на единицу при добавлении значительных улучшений в расширения команд. cmdextversion условное выражение никогда не принимает значение true, если расширения команд отключены (по умолчанию расширения команд включены). |
определено <переменная> | Указывает истинное условие, если определена переменная . |
<выражение> | Указывает команду командной строки и любые параметры, которые должны быть переданы команде в предложении else .![]() |
/? | Отображает справку в командной строке. |
Если условие, указанное в предложении if , истинно, выполняется команда, следующая за условием. Если условие ложно, команда в предложении if игнорируется, и команда выполняет любую команду, указанную в предложении else .
Когда программа останавливается, она возвращает код выхода. Чтобы использовать коды выхода в качестве условий, используйте параметр уровня ошибки .
Если вы используете , определенный , в среду добавляются следующие три переменные: %errorlevel% , %cmdcmdline% и %cmdextversion% .
%errorlevel% : Раскрывается в строковое представление текущего значения переменной среды ERRORLEVEL. Эта переменная предполагает, что уже не существует переменной среды с именем ERRORLEVEL.
Если есть, вместо этого вы получите это значение ERRORLEVEL.
%cmdcmdline% : Заменяет исходную командную строку, которая была передана Cmd.exe до какой-либо обработки Cmd.exe. Это предполагает, что уже не существует переменной среды с именем CMDCMDLINE. Если есть, вместо этого вы получите это значение CMDCMDLINE.
%cmdextversion% : Раскрывается в строковое представление текущего значения cmdextversion . Это предполагает, что уже не существует переменной среды с именем CMDEXTVERSION. Если есть, вместо этого вы получите это значение CMDEXTVERSION.
Вы должны использовать предложение else в той же строке, что и команда после if .
Примеры
Чтобы отобразить сообщение Не удается найти файл данных, если файл Product.dat не найден , введите:
, если не существует product.dat echo Не удается найти файл данных
Чтобы отформатировать диск в дисководе A и отобразить сообщение об ошибке, если в процессе форматирования возникнет ошибка, введите следующие строки в командном файле:
:начало @эхо выключено формат а: /s если не уровень ошибки 1, перейти к концу эхо Произошла ошибка во время форматирования. :конец echo Конец пакетной программы.
Чтобы удалить файл Product.dat из текущего каталога или отобразить сообщение, если Product.dat не найден, введите в командный файл следующие строки:
IF EXIST Product.dat ( del Product.dat ) ЕЩЕ ( echo Файл Product.dat отсутствует. )
Примечание
Эти строки можно объединить в одну строку следующим образом:
ЕСЛИ СУЩЕСТВУЕТ Product.dat (удалить Product.dat) ИНАЧЕ (эхо Файл Product.dat отсутствует.)
Чтобы отобразить значение переменной среды ERRORLEVEL после запуска пакетного файла, введите следующие строки в пакетном файле:
goto answer%errorlevel% :ответ1 echo Программа вернула ошибку уровня 1 перейти к концу :ответ0 echo Программа возвратила уровень ошибки 0 перейти к концу :конец эхо Готово!
Чтобы перейти к метке OK, если значение переменной окружения ERRORLEVEL меньше или равно 1, введите:
если %errorlevel% LEQ 1 перейти в нормальное состояние
Дополнительные ссылки
Ключ синтаксиса командной строки
команда перехода
Обратная связь
Отправить и просмотреть отзыв для
Этот продукт Эта страница
Просмотреть все отзывы о странице
Пакетный файл, если операторы вызывают закрытие CMD и не работают
спросил
Изменено 1 год, 9 месяцев назад
Просмотрено 412 раз
Я создаю простой пакетный файл, который позволит мне ввести имя класса и приведет меня к нужному классу Google. Однако мой оператор if не работает, даже когда я ввожу слово «Обществознание». Он не ведет меня в мой класс, и, кроме того, CMD просто закрыт. Когда я удаляю строку If Statement, код работает нормально, а cmd просто остается открытым после ввода класса.
комплект /шт. IF "%class%" /I EQU "Обществознание" (НАЧАТЬ https://classroom.google.com) cmd/к
- оператор if
- пакетный файл
3
IF/I "%class%" EQU "Обществознание"...
Логика синтаксического анализа оператора if
очень специфична; if [/i][NOT] arg1 op arg2
где /i
и не
не обязательны, но обязательно , если используется, использовать в таком порядке.
Ваш код видит /i
, где он ожидает оператора сравнения и генерирует синтаксическую ошибку.
При использовании метода «наведи и хихикай» для выполнения пакета окно пакета часто закрывается, если обнаруживается синтаксическая ошибка.