Вызов функции управления с помощью пользовательского ввода: Пакет - PullRequest
0 голосов
/ 06 марта 2019

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

@ECHO off

ECHO Select [A] Adding File [R] Remove File [C] Copy File [E] Close Program.

GOTO:startCompile


:startCompile
::CLS

SET /p select = Make a selection. 

IF "%select%"=="1" ( goto addingFileObject )
IF "%select%"=="2" ( goto removeFileObject )
IF "%select%"=="3" ( goto copy )
IF "%select%"=="4" ( goto defaultExit )

:addingFile
ECHO "Adding files"
goto:EOF

:removeFile
ECHO "Remove files"
goto:EOF

:defaultExit
pause
goto:EOF

:copy
ECHO "Copying Filed"
goto:EOF

Ответы [ 2 ]

3 голосов
/ 06 марта 2019

… и используя более подходящую команду Choice:

@Echo Off
Choice /C ARCE /N /M "Select [A]dd [R]emove [C]opy or [E]xit"
If ErrorLevel 4 GoTo :EOF
If ErrorLevel 3 GoTo copy
If ErrorLevel 2 GoTo removeFile

Echo "Adding files"
Timeout 2 /NoBreak>Nul
Exit /B

:removeFile
Echo "Remove files"
Timeout 2 /NoBreak>Nul
Exit /B

:copy
Echo "Copying Files"
Timeout 2 /NoBreak>Nul
1 голос
/ 06 марта 2019

Код содержит две ошибки.

Неверная строка SET /P select<space>=... или, по крайней мере, непредвиденное поведение.
Он устанавливает переменную с именем select<space>, поэтому доступ через %select% всегда будет неудачным.

Отсутствует exit /b или goto :eof после блока команд IF, что приводит к некорректному поведению, если ни одно из IF-сравнений не выполняется.
Затем будет выполнена часть addFile.

Btw. Такие проблемы могут быть просто отлажены с помощью ECHO ON. В этом случае это показало бы вторую проблему этими строками: %select% всегда пуст

...
c:\Temp>IF "" == "1" (goto addingFileObject  )
c:\Temp>IF "" == "2" (goto removeFileObject  )
c:\Temp>IF "" == "3" (goto copy  )
c:\Temp>IF "" == "4" (goto defaultExit  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...