Вложение IF в файл Windows Bat
У меня возникли некоторые трудности в понимании того, как Nested IF работает в сценарии Windows .bat. То, что я хочу достичь, заключается в следующем. Я передам два параметра в файл bat
ЕСЛИ первый параметр = 0 И если Второй параметр = 0, запустите proc1
ЕСЛИ первый параметр = 0 И второй, а не 0, запустить proc2
ЕСЛИ первый параметр не равен 0, запустите 3
Скелет кода, который я написал до сих пор,
@echo off
IF %1% == 0 (
IF %2% == 0 ( goto proc1
) ELSE ( goto proc2
)
ELSE ( goto proc3
)
:proc1
echo in Proc1 0 0
pause
exit
:proc2
echo in Proc2 0 N0
pause
exit
:proc3
echo in Proc3 N0 0
pause
exit
Проблема в том, что он работает нормально для первых двух условий, но когда первый параметр ненулевой, он все равно падает через proc1, тогда как ожидаемый - proc3. Что мне здесь не хватает? Скрипт не выдает никакой ошибки, кроме случаев, когда параметры опущены в первую очередь.
2 ответа
Я на самом деле не уверен, что вам нужен ELSE, не говоря уже о вложенном IF, для вашего случая использования:
@echo off
IF NOT "%1%"=="0" (
goto proc3
)
IF "%2%"=="0" (
goto proc1
)
goto proc2
:proc1
echo in Proc1 0 0
pause
exit
:proc2
echo in Proc2 0 N0
pause
exit
:proc3
echo in Proc3 N0 0
pause
exit
Если по какой-то причине вы действительно хотите вкладывать свои IF, у вас отсутствует скобка:
Ваша партия:
IF %1% == 0 ( IF %2% == 0 ( goto proc1 ) ELSE ( goto proc2 ) ***MISSING )*** ELSE ( goto proc3 )
Пакет, который должен работать:
IF "%1%" == "0" (
IF "%2%" == "0" (
goto proc1
) ELSE (
goto proc2
)
) ELSE (
goto proc3
)
Что мне здесь не хватает?
==
Оператор сравнения всегда приводит к сравнению строк.
Вам нужно использовать EQU
вместо этого, чтобы выполнить численное сравнение.
Используйте следующий пакетный файл:
@echo off
IF NOT %1% EQU 0 (
goto proc3
)
IF %2% EQU 0 (
goto proc1
)
goto proc2
:proc1
echo in Proc1 0 0
pause
goto :exit
:proc2
echo in Proc2 0 N0
pause
goto :exit
:proc3
echo in Proc3 N0 0
pause
:exit
Заметки:
- Немного
goto :exits
s были добавлены, чтобы завершить процесс вместоexit
который завершает вложениеcmd
ракушка.
Пример вывода:
F:\test>example 0 0
in Proc1 0 0
Press any key to continue . . .
F:\test>example 0 1
in Proc2 0 N0
Press any key to continue . . .
F:\test>example 1 0
in Proc3 N0 0
Press any key to continue . . .
F:\test>
Дальнейшее чтение
- Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- if - Условно выполнить команду.