Пакет: Как предотвратить зацикливание кода при удержании ввода - PullRequest
0 голосов
/ 27 января 2019

Итак, я сделал кое-что здесь, где будет список чисел, таких как 1-10, и тот, который вы наберете (пока только 1), покажет вам информацию (поэтому, если я наберу и введу 1, это будетgo key1 = key).

Однако, если я наберу 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 ]

0 голосов
/ 27 января 2019
@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

Если вы нажмете только Введите в приглашении set /p, переменная word не будет установлена ​​(новое значение).Если word не определено перед входом set /p, то оно будет неопределенным после того, как вы нажмете Ввод .

setlocal добавлено, чтобы переменные были установлены локально для текущеговыполнение скрипта.

0 голосов
/ 27 января 2019

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

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

...