Пакет: Как предотвратить зацикливание кода при удержании ввода

Таким образом, я сделал кое-что здесь, где будет список чисел, таких как 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

Позвольте мне обратить ваше внимание на команду выбора, которая может (или не может) быть лучшим выбором.

Другие вопросы по тегам