(было неожиданно в это время - пакет script
Я использую пакет script ниже и получаю сообщение об ошибке
(было неожиданным в настоящее время.
Я знаю, что проблема в первой строке, но я не понимаю, что не так.
Любые идеи?
script:
IF [%1]==[] (
:LOOP1
SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local Area Connection 2]?[y/n]
IF %isDefault%==y (
SET from=1
SET step=1
SET to=10
SET lan="Local Area Connection 2"
GOTO :USERLOOP
)
IF %isDefault%==n GOTO :END
GOTO :LOOP1
)
Ответы
Ответ 1
Собственно, проблема не в первой строке.
Проблема заключается в том, что cmd
выполняет подстановку переменных сразу же, когда она анализирует оператор IF
, включая его тело. Поэтому линия:
IF %isDefault%==y (
проблематично, потому что isDefault
не задается, когда внешний оператор IF
анализируется, поэтому он становится:
IF ==y (
и, следовательно, вы получите сообщение об ошибке (
. Вы можете обойти это, включив расширение команды (SETLOCAL ENABLEDELAYEDEXPANSION
) для расширения переменной среды с задержкой (подробнее см. set /?
). Вы также можете переписать свой script:
@ECHO OFF
IF NOT "%1"=="" GOTO :EOF
:LOOP1
SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local Area Connection 2]?[y/n]
IF "%isDefault%"=="y" (
SET from=1
SET step=1
SET to=10
SET lan="Local Area Connection 2"
GOTO :USERLOOP
)
IF "%isDefault%"=="n" GOTO :EOF
GOTO :LOOP1
(Я сделал некоторые другие изменения, например, используя встроенную метку :EOF
вместо :END
.)
Ответ 2
Как сказал jamesdlin, это проблема с пустыми переменными, а также с delayedExpansion.
Тогда решение просто, заменив %isDefault%
на !isDefault!
, это работает, даже если isDefault пуст.
setlocal EnableDelayedExpansion
IF [%1]==[] (
:LOOP1
SET /P isDefault=Value Missing, do you want to use default values [1,1,10,Local Area Connection 2]?[y/n]
IF !isDefault!==y (
SET from=1
SET step=1
SET to=10
SET lan="Local Area Connection 2"
GOTO :USERLOOP
)
IF !isDefault!==n GOTO :END
GOTO :LOOP1
)
Ответ 3
У меня была очень похожая проблема и конструкция кода, которая вызывала у меня много боли. Мое сообщение об ошибке было ". В это время было неожиданно" ...
Мне потребовалось пару долгих дней, чтобы выяснить другое подобное соображение из-за этой проблемы... Ниже приведена следующая проблема и последующее решение: . было неожиданным в это время " сгенерированный из пакета script line ', если существует [файл] (...
Решение было просто обработкой '(' и ')' на линиях ECHO внутри блока оператора IF.
Дело в том, что рассматривайте обработку специальных символов как возможный источник проблемы при поиске и устранении ошибок IF (и, возможно, FOR).
HTH кто-то...