如何批量捕获 ENTER 击键?

1 batch-file

网站和脚本的新手。我知道您可以像这样创建用户输入:

set input=
set /p input=[y/n]: %=%
Run Code Online (Sandbox Code Playgroud)

那么您可以使用“如果”来询问它们是否是某些响应。例子:

if "%input%"=="y" goto a:
Run Code Online (Sandbox Code Playgroud)

并检查它是否不是说输入

if "%input%" NEQ "y" goto b:
Run Code Online (Sandbox Code Playgroud)

因为我没有受过教育,所以我不知道如何做到这一点,但我希望能够确定输入是否是 Enter 键击。我试图通过使用来实现这一点

if "%input%"==[ENTER] goto a:
Run Code Online (Sandbox Code Playgroud)

if "%input%"==enter
Run Code Online (Sandbox Code Playgroud)

以及我能想到的每一种方法来确定击键是否是 [ENTER]。我可能只是愚蠢,但有没有办法做到这一点?谢谢。

MC *_* ND 5

至少有两种方法可以做到这一点:检查值或检查操作

set /p检索键入的输入并将其存储在变量中,但是当没有输入时,只需Enter按一下,变量就没有存储操作,因此它保留其先前的值。

测试值的常用方法是清除变量内容,使用set /p和 测试变量是否已定义,即是否有内容

set "var="
set /p "var=[y/n]?"
if not defined var goto :noUserInput
Run Code Online (Sandbox Code Playgroud)

我们还可以测试操作本身。在批处理文件中,大多数命令设置为某个值的内部errorlevel变量,指示命令执行的成功或失败。

在这种情况下,如果已检索到数据set /p,它将设置errorlevel为 0,如果没有输入,则将其设置为 1。然后if errorlevel可以使用该构造来确定是否有输入

set /p "var=[y/n]?"
if errorlevel 1 goto :noUserInput
Run Code Online (Sandbox Code Playgroud)

正如 Aacini 所指出的,这可能会失败。如果批处理文件具有.bat扩展名 aset /p读取数据不会重置(设置为 0)先前的errorlevel值,因此需要先执行一些命令将其设置errorlevel为 0。

ver > nul
set /p "var=[y/n]?"
if errorlevel 1 goto :noUserInput
Run Code Online (Sandbox Code Playgroud)

如果批处理文件以.cmd扩展名保存,则不需要。在这种情况下,set /p它将errorlevel在读取数据时将 设置为 0。

也可以使用条件执行运算符(&&||)。&&如果前一个命令成功,则执行下一个命令。||如果前一个命令失败,将执行下一个命令。

set /p "var=[y/n]?" || goto :noUserInput
Run Code Online (Sandbox Code Playgroud)