(было неожиданно в это время - пакет 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 кто-то...