У меня проблема с моим пакетным скриптом, вероятно, связанная с синтаксисом вложенных блоков.
У меня есть два сценария: основной сценарий и сценарий запуска, чтобы запустить основной. Оба примера соответственно называются «script.bat» и «start.bat».
Ниже сценариев (MCVE):
script.bat
@echo off
set init="%1"
set bool=%2
set switch=%3
if %bool%==true (
set var=%init:"=%
set check=false
if "%switch%"=="I" (
if "%var%"=="A" set check=true
if "%var%"=="B" set check=true
if "%var%"=="C" set check=true
if "%var%"=="D" set check=true
if "%var%"=="E" set check=true
if "%var%"=="F" set check=true
if "%var%"=="G" set check=true
)
if "%switch%"=="II" (
if "%var%"=="A" set check=true
if "%var%"=="B" set check=true
if "%var%"=="C" set check=true
if "%var%"=="D" set check=true
if "%var%"=="E" set check=true
)
if "%switch%"=="III" (
if "%var%"=="A" set check=true
if "%var%"=="B" set check=true
if "%var%"=="C" set check=true
if "%var%"=="D" set check=true
if "%var%"=="E" set check=true
if "%var%"=="F" set check=true
)
if %check%==false set code=1
if %check%==true set code=0
if %check%==true set result=%var%
)
if %bool%==false echo Skipped!
if %bool%==false goto quit
if defined result (
echo RESULT = %result% [exit code: %code%]
) else (
echo RESULT = NULL [exit code: %code%]
)
:quit
echo.
pause
exit
start.bat
@echo off
start script.bat C true II
start script.bat F true II
start script.bat B false I
Вот ожидаемые результаты (должно появиться три консоли Windows, как показано ниже.)
Первая консоль:
RESULT = C [exit code: 0]
Press any key to continue...
Вторая консоль:
RESULT = NULL [exit code: 1]
Press any key to continue...
Третья консоль:
Skipped!
Press any key to continue...
Вместо этого у меня есть ошибка ниже в каждой из трех консолей:
set was unexpected at this time.
Спасибо за вашу помощь и извините, если мой английский иногда неточен.
Хорошего дня. :)
РЕДАКТИРОВАТЬ: эта проблема, кажется, не связана с отложенными расширениями, потому что здесь есть синтаксическая ошибка. Проблема, связанная с «отложенным расширением», должна привести к неверному результату, а не к синтаксической ошибке, как в моем примере.
РЕДАКТИРОВАТЬ 2: после попытки с отложенными расширениями, это работает! Пожалуйста, не обращайте внимания на предыдущее редактирование.