批次:如何在按住Enter键时防止循环代码

时间:2019-01-27 09:21:59

标签: loops batch-file enter

因此我在这里做了一些操作,其中会有一个数字列表,例如1-10,而您键入的任何一个(到目前为止只有1)都会向您显示信息(因此,如果我键入并输入1,它将转到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 :(得分:0)

set /p保留最后一个值(如果只是按Enter键)。您应该将变量设置为空(或根据需要设置为默认值):

@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命令,这可能是(也可能不是)更好的选择。

答案 1 :(得分:0)

@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提示符下按 Enter ,则未设置变量word(新值)。 如果在word输入之前未定义set /p,那么在输入之后将未定义, 如果您只按 Enter

setlocal已添加,以将变量设置为当前脚本的局部变量 执行。