如何批量捕获ENTER键?

时间:2015-06-13 23:49:23

标签: batch-file

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

if "%input%"=="y" goto a:

然后您可以询问使用“if”来查看它们是否是某些响应。例如:

if "%input%" NEQ "y" goto b:

并通过说

检查是否没有输入
if "%input%"==[ENTER] goto a:

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

来实现这一目标
if "%input%"==enter

null

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

2 个答案:

答案 0 :(得分:4)

至少有两种方法:检查值或检查操作

set /p检索存储在变量中的类型输入,但是当没有输入时,只按 Enter 按下,变量上没有存储操作,所以它保留了以前的变量值。

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

set "var="
set /p "var=[y/n]?"
if not defined var goto :noUserInput

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

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

set /p "var=[y/n]?"
if errorlevel 1 goto :noUserInput

正如Aacini指出的那样,这可能会失败。如果批处理文件具有.bat扩展名,则读取数据的set /p将不会重置(设置为0)先前的errorlevel值,因此必须先执行一些命令来设置{ {1}}为0。

errorlevel

如果批量文件以ver > nul set /p "var=[y/n]?" if errorlevel 1 goto :noUserInput 扩展名保存,则不需要。在这种情况下,.cmd会在读取数据时将set /p设置为0.

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

||

答案 1 :(得分:1)

If not defined input ...

检测input是否具有指定值。

编码

set "input="
set /p "input=[y/n]: "
if not defined input echo Enter alone detected

应该单独检测输入键。

语法set "var=string"确保行上的尾随空格不包含在指定的值中(很难看到)。

请注意,简单 Enter 的响应将使目标变量保持不变;它不会为变量分配 nothing 。因此,明智的做法是确保在手动输入之前清除变量。