Пакетный файл не распознает ничего внутри оператора IF-ELSE - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь создать командный файл, который значительно упростит командную строку для людей в будущем, предоставляя текстовые меню для людей, чтобы они выбирали свои параметры и помещали необходимые аргументы вместо того, чтобы запоминать эту большую команду.

Я пытался поместить его через FOR и исправить любое форматирование, которое я считаю правильным, но оно не сработало.

ECHO {{Are you certain you wish to run EarthShell.bat? (y/N)}}
SET /P confirm=""
FOR ..... DO (
    IF "%confirm%"=="y" (
        ECHO [[ STOPPED: EarthShell.bat encountered an EOF error, and needed to quit. ]]
        THEN ECHO [[ Press any key to exit... ]]
        THEN TIMEOUT /T 600
        EXIT )
    IF "%confirm%"=="Y" (
        ECHO [[ STOPPED: EarthShell.bat encountered an EOF error, and needed to quit. ]]
        THEN ECHO [[ Press any key to exit... ]]
        THEN TIMEOUT /T 600
        EXIT )
    IF "%confirm%"=="N" (
        ECHO [[ Press any key to exit... ]]
        THEN TIMEOUT /T 600
        EXIT )
    IF "%confirm%"=="n"  (
        ECHO [[ Press any key to exit... ]]
        THEN TIMEOUT /T 600
        EXIT
    ) ELSE  (
        ECHO {{Invalid response. Assuming 'N' and exiting EarthShell.bat.}}
        EXIT
    )
)

Приведенный выше код, так как я до сих пор не дошел до фактического размещения команд, завершается, не давая ничего внутри прочитанного оператора IF-ELSE. Теоретически, когда я набираю «y» или «Y», скажем [[ STOPPED: EarthShell.bat encountered an EOF error, and needed to quit. ]], он должен запросить нажатие клавиши или дождаться окончания 10-минутного тайм-аута, а затем выйти.

1 Ответ

0 голосов
/ 28 марта 2019

Я действительно думаю, что вы должны использовать команду Choice.В приведенном ниже примере он используется и значительно сокращает код:

@Echo Off
Choice /M "Are you certain you wish to run %~nx0"
If ErrorLevel 2 (Echo Press any key to exit...
    Timeout 6
    Exit /B)
Echo STOPPED: %~nx0 encountered an EOF error, and needed to quit.
Echo Press any key to exit...
Timeout 6

Если вы все еще хотите использовать подчиненную команду Set /P и параметр:

@ECHO OFF
ECHO {{Are you certain you wish to run %~nx0? (Y/N)}}
SET /P "confirm="
IF /I "%confirm%"=="y" (
    ECHO [[ STOPPED: %~nx0 encountered an EOF error, and needed to quit. ]]
    ECHO [[ Press any key to exit... ]]
    TIMEOUT 6
    EXIT /B
) ELSE (
    IF /I "%confirm%"=="n" (
        ECHO [[ Press any key to exit... ]]
        TIMEOUT 6
        EXIT /B
    ) ELSE (
        ECHO {{Invalid response. Assuming 'N' and exiting %~nx0.}}
        TIMEOUT 6
        EXIT
    )
)

Вы заметите, что у меня естьиспользовал 6 секунд для целей этих примеров, потому что я не видел никакой пользы в тиражировании десятиминутной Timeout, вы, конечно, можете оставить ее как 600, если потребуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...