Пакет: Как предотвратить зацикливание кода при удержании ввода
Таким образом, я сделал кое-что здесь, где будет список чисел, таких как 1-10, и какое бы вы ни набрали (пока только 1) покажет вам информацию (поэтому, если я наберу и введу 1, будет идти key1= ключ).
Однако, если я наберу 1 и нажму Enter, это показывает, что ключ Key1 =, который я намеревался, но затем, если я удерживаю клавишу Enter, он продолжит цикл сценария Key1=Key и сценария домашней страницы, может ли это быть остановлено?
@echo off
:T
cls
echo Home Page
echo [1] NameA
echo.
echo [e] Exit
set /p word=
if "%word%"=="1" goto aaa
if "%word%"=="e" goto eee
goto T
:aaa
cls
echo Key1 = Key
pause
goto T
:eee
exit
2 ответа
@echo off
setlocal
:T
cls
echo Home Page
echo [1] NameA
echo.
echo [e] Exit
rem Undefine variable word before input.
set "word="
set /p "word="
rem No input = word is not set a new value, thus not defined.
if not defined word goto eee
if "%word%"=="1" goto aaa
if "%word%"=="e" goto eee
goto T
:aaa
cls
echo Key1 = Key
pause
goto T
:eee
exit
Если вы нажмете только Enter на set /p
быстрый, переменный word
не установлено (новое значение). Если word
не определено до set /p
ввод, то он будет неопределенным после, если вы только нажмете Enter.
setlocal
добавлено сохранение локальных переменных для текущего исполнения скрипта.
set /p
сохраняет последнее значение, если вы просто нажмете ввод. Вы должны установить переменную на пустое (или значение по умолчанию, если вы предпочитаете):
@echo off
:loop
REM set "word=" ; for "empty"
set "word=string"
set /p "word=Enter your choice (or just ENTER for '%word%': "
echo you choosed %word%
goto :loop
Позвольте мне обратить ваше внимание на команду выбора, которая может (или не может) быть лучшим выбором.