如何获取用户输入 - 批处理?

13

所以我想编写一个可选代码,让用户输入y或n来关闭程序。这是我一直在尝试的:

    @echo off
    echo                                      ---WARNING---
    echo.
    echo DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)
    If /I "%Input%"=="y" goto yes
    If /I "%Input%"=="n" goto no
    :yes
    shutdown /s
    :no
    pause

我是否走在正确的轨道上?

4个回答

20

试着添加这个。

set /p Input=Enter Yes or No:

我还添加了一个goto,因为如果您输入的不是“yes”或“no”,那么它就会自动转到“yes”。如果以下代码失败,则可以添加此代码,但底部的代码应该有效。

set /P INPUT=Type input: %=%
If %INPUT%=="y" goto yes 
If %INPUT%=="n" goto no

你的代码应该像这样:

@echo off
echo                                      ---WARNING---
echo.
echo DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)
set /p Input=Enter Yes or No:
If /I "%Input%"=="y" goto yes
goto no
:yes
shutdown /s
:no
pause

6

另外一个更加简单的两行代码实现方式,不需要使用if语句,如下所示:

两行代码如下:

choice /c yn /n /m "DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)"
goto %ERRORLEVEL%

完整代码(包括2行编辑):

@echo off
echo                                      ---WARNING---
echo.
choice /c yn /n /m "DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)"
goto %ERRORLEVEL%
:1
shutdown /s
:2
pause

内置命令的解释:

此工具允许用户从一系列选项中选择一个项目,并返回所选选项的索引。 /c yn 指定了用户可以选择的选项。 /n 隐藏了默认提示信息。 /m 给用户提供了自定义消息,定义在 " " 中。需要第二行的是 goto %ERRORLEVEL%,它将代码发送到代码中所需的:%ERRORLEVEL% (此解释仅适用于choice命令。 %ERRORLEVEL% 可以以多种其他方式使用。)返回1到x之间的数字,其中x是可选项的总数。在此示例中,当按下 y 时,将返回1,当按下 n 时,将返回2。

编辑: 你有点正确,但你只是使用了错误的命令。您可以实现我的修复的另一种方法如下:

@echo off
echo                                      ---WARNING---
echo.
choice /c yn /n /m "DO YOU WANT YOUR COMPUTER TO SHUTDOWN? (y/n)"
set INPUT=%ERRORLEVEL%
if %INPUT% EQU 1 goto yes
if %INPUT% EQU 2 goto no
:yes
shutdown /s
:no
pause

对于if命令,你需要使用C++语法表示等于。在批处理中,你需要使用EQU表示等于,NEQ表示不等于,LSS表示小于,LEQ表示小于等于,GTR表示大于,GEQ表示大于等于。如果你需要更深入的了解,请在打开命令提示符时输入if /?。它包含了非常丰富的信息。
此外,这也可以消除任何用户错误,也就是说,无论用户如何尝试破坏或错误使用它,都可以避免。
~Burn

2
这是我会的做法:
@echo off
setlocal

:again
set /p ans=Do you want to do something? (y/n) 
if /i "%ans:~0,1%" EQU "Y" (
  Echo you selected Yes.
  REM do yes stuff
) ELSE (if /i "%ans:~0,1%" EQU "N" (
     Echo you selected No. 
     REM Do no stuff 
     ) ELSE (
     Echo You need to select yes or no only.
     goto :again
     )
)

这样,您就可以捕捉到用户未输入“是”或“否”的情况,并且可以捕捉到用户输入任何形式的“是”或“否”的情况。


0

如此就足够了,它将提示用户,好像他们输入一样

set DAYNUM={user value} 

在命令提示符下。
例如。
set /p DAYNUM=Enter DAYNUM:

这真的很简单,只有一个命令标志而不是四个,它不依赖于命令扩展,并且版本兼容性问题很少。

就验证而言,用户必须输入正确的参数。如果他们没有,那就是错误的。就这么简单。 回显以确认并暂停,用户可以通过控制中断退出。

能否花更多时间争论不同方法的利弊?当然可以。 这明智吗?可能不是。高效吗?当然不是。是否需要50分才能评论现有答案,而发表新答案则不需要任何分数?是的。


抱歉,您是错误的。没有命令扩展,set 不支持 /p 开关。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接