Bat if: cmd — Условный оператор IF [NOT] не работает в bat файле

MS-DOS и командная строка Windows, если команда

Обновлено: 30 декабря 2021 г., автор: Computer Hope

Команда if выполняет условную обработку в пакетных программах.

  • Наличие
  • Если синтаксис
  • Если примеры

Наличие

Команда if является внутренней командой, используемой в пакетных файлах.

  • Windows 95
  • Windows 98
  • Windows NT
  • Windows ХР
  • Windows 2000
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 10
  • Windows 11

Если синтаксис

  • Синтаксис Windows Vista и более поздних версий.
  • Синтаксис Windows XP и более ранних версий.

Windows Vista и более поздние версии синтаксиса

 IF [NOT] ERRORLEVEL номер команды
ЕСЛИ [НЕ] строка1==строка2 команда
IF [NOT] EXIST имя файла команда 
НЕ Указывает, что Windows 2000 или XP должны выполнять команду, только если условие ложно.
УРОВЕНЬ ОШИБКИ номер Указывает истинное условие, если последний запуск программы вернул код выхода, равный или превышающий указанное число.
строка1==строка2 Указывает истинное условие, если указанные текстовые строки совпадают.
СУЩЕСТВУЮЩЕЕ имя файла Указывает истинное условие, если файл с указанным именем существует.
команда Указывает команду, которую нужно выполнить, если условие выполнено. За командой может следовать команда ELSE, которая будет выполнять команду после ключевого слова ELSE, если указанное условие равно FALSE.

Предложение ELSE должно находиться в той же строке, что и команда после IF. Например:

 ЕСЛИ СУЩЕСТВУЕТ имя файла. (
 дел имя файла.
) ЕЩЕ (
 эхо имя файла. отсутствующий.
) 

Приведенный ниже пример НЕ будет работать, потому что команду del необходимо завершать символом новой строки:

 ЕСЛИ СУЩЕСТВУЕТ имя файла.  дел имя файла. ELSE эхо-имя файла. отсутствует 

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

 ЕСЛИ СУЩЕСТВУЕТ имя файла. дел имя файла.
ELSE эхо-имя файла. отсутствует 

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

 ЕСЛИ СУЩЕСТВУЕТ имя файла. (удалить имя файла.) ELSE эхо-имя файла. отсутствует 

Если расширения команд включены, ЕСЛИ изменяется следующим образом:

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

, где оператор сравнения может быть одним из:

  • EQU — равно
  • NEQ — не равно
  • ЛСС — менее
  • LEQ — меньше или равно
  • ГТР — больше
  • GEQ — больше или равно

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

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

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

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

.

 перейти к ответу%ERRORLEVEL%
:ответ0
echo Программа имела код возврата 0
:ответ1
echo Программа имела код возврата 1 

Вы также можете использовать числовые сравнения ниже:

 IF %ERRORLEVEL% LEQ 1 перейти в норму 

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

%CMDEXTVERSION% заменяется на строку со значением CMDEXTVERSION, если еще нет переменной среды с именем CMDEXTVERSION, и в этом случае вы получите ее значение.

Windows XP и более ранние версии синтаксиса

Выполняет условную обработку в пакетных программах.

 IF [NOT] ERRORLEVEL номер команды
ЕСЛИ [НЕ] строка1==строка2 команда
IF [NOT] EXIST имя файла команда 
НЕ Указывает, что Windows должна выполнять команду, только если условие ложно.
УРОВЕНЬ ОШИБКИ номер Указывает истинное условие, если последний запуск программы вернул код выхода, равный или превышающий указанное число.
команда Указывает команду, которую нужно выполнить, если условие выполнено.
строка1==строка2 Указывает истинное условие, если указанные текстовые строки совпадают.
СУЩЕСТВУЮЩЕЕ имя файла Указывает истинное условие, если файл с указанным именем существует.

Примеры

Дополнительные примеры и варианты использования команды selection см. на странице справки пакетного файла.

  • См. наше определение if else для получения дополнительной информации и связанных ссылок по этому термину.

скрипт — Вложение IF в Windows Bat файл

спросил

Изменено
7 лет, 2 месяца назад

Просмотрено
36 тысяч раз

Мне трудно понять, как работает вложенный IF в сценарии Windows . bat. Я хочу добиться следующего. Я буду передавать два параметра в bat-файл

ЕСЛИ первый параметр = 0 И если Второй параметр = 0 запустить proc1

ЕСЛИ первый параметр = 0 И Второй не 0 запустить proc2

ЕСЛИ первый параметр не 0 запустить proc 3

Скелет кода я написал так далеко

 @echo off
ЕСЛИ %1% == 0 (
    ЕСЛИ %2% == 0 ( перейти к proc1
    ) ИНАЧЕ ( перейти к процедуре2
)
  ИНАЧЕ ( перейти к proc3
)
:proc1
эхо в Proc1 0 0
Пауза
Выход
:proc2
эхо в Proc2 0 N0
Пауза
Выход
:proc3
эхо в Proc3 N0 0
Пауза
Выход
 

Проблема в том, что он работает нормально для первых двух условий, но когда первый параметр не равен нулю, все еще падает через proc1, тогда как ожидается proc3. Что мне здесь не хватает? Скрипт не выдает никаких ошибок, за исключением случаев, когда параметры опущены.

  • скрипт
  • пакетный файл

1

На самом деле я не уверен, что вам нужно ELSE, не говоря уже о вложенном IF, для вашего варианта использования:

 @echo off
ЕСЛИ НЕ "%1%"=="0" (
    перейти к процедуре 3
)
ЕСЛИ "%2%"=="0" (
    перейти к процедуре 1
)
перейти к proc2
:proc1
эхо в Proc1 0 0
Пауза
Выход
:proc2
эхо в Proc2 0 N0
Пауза
Выход
:proc3
эхо в Proc3 N0 0
Пауза
Выход
 

Если по какой-то причине вы действительно хотите вложить свои ЕСЛИ, вам не хватает скобки:

Ваша партия:

 ЕСЛИ %1% == 0 (
    ЕСЛИ %2% == 0 ( перейти к proc1
    ) ИНАЧЕ ( перейти к процедуре2
)
***ОТСУТСТВУЕТ )*** ИНАЧЕ ( перейти к proc3
)
 

Пакет, который должен работать:

 ЕСЛИ "%1%" == "0" (
    ЕСЛИ "%2%" == "0" (
    перейти к процедуре 1
    ) ЕЩЕ (
    перейти к proc2
    )
) ЕЩЕ (
    перейти к процедуре 3
)
 

2

Что мне здесь не хватает?

Оператор сравнения == всегда дает строка сравнение.

Вместо этого необходимо использовать EQU для выполнения числового сравнения с .

Используйте следующий пакетный файл:

 @echo off
ЕСЛИ НЕ %1% РАВНО 0 (
    перейти к процедуре 3
)
ЕСЛИ %2% ЭКВ 0 (
    перейти к процедуре 1
)
перейти к proc2
:proc1
эхо в Proc1 0 0
Пауза
перейти: выход
:proc2
эхо в Proc2 0 N0
Пауза
перейти: выход
:proc3
эхо в Proc3 N0 0
Пауза
:Выход
 

Примечания:

  • Некоторые goto :exits были добавлены для завершения процессов вместо выход , который завершает вмещающую оболочку cmd .

Пример вывода:

 F:\test>example 0 0
в процедуре1 0 0
Нажмите любую клавишу для продолжения . . .
F:\тест>пример 0 1
в Proc2 0 N0
Нажмите любую клавишу для продолжения . . .
F:\тест>пример 1 0
в Proc3 N0 0
Нажмите любую клавишу для продолжения . . .
Ф:\тест>
 

Дополнительная литература

  • Алфавитный указатель командной строки Windows CMD — отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • if — Условно выполнить команду.

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.