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

RHY*_*YN0 9 batch-file

所以我想编码一个可选的,用户可以输入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
Run Code Online (Sandbox Code Playgroud)

我是否在正确的轨道上?

09s*_*enb 14

尝试添加这个。

set /p Input=Enter Yes or No:
Run Code Online (Sandbox Code Playgroud)

我还添加了一个,goto因为如果您输入的内容不是是或否,那么它会自动变为是。如果下面的代码失败,您可以添加它,但底部的代码应该可以工作。

set /P INPUT=Type input: %=%
If %INPUT%=="y" goto yes 
If %INPUT%=="n" goto no
Run Code Online (Sandbox Code Playgroud)

你的代码应该是这样的:

@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
Run Code Online (Sandbox Code Playgroud)


Bur*_*E99 6

另一种简单的方法是用两行代码来完成此操作,而不使用 IF 语句:

2行编辑:

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

完整代码(包含 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
Run Code Online (Sandbox Code Playgroud)

选择的解释,内置命令:

该工具允许用户从选项列表中选择一项并返回所选选项的索引。指定/c yn用户必须进行选择的选项。/n对用户隐藏默认提示。向用户提供/m自定义消息,在" ". 所需的第二行是goto %ERRORLEVEL%,它将代码发送到:代码中所需的位置。 %ERRORLEVEL%(此解释仅针对 choice 命令。 %ERRORLEVEL%可以用于许多其他方式。)返回 1 到 x 之间的数字,其中 x 是选项总数。本例中,按下 时返回 1 ,按下y时返回 2 。n

编辑: 您已经步入正轨,但您只是使用了错误的命令。您可以实施我的修复的另一种方法是:

@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
Run Code Online (Sandbox Code Playgroud)

对于该if命令,您可以使用 C++ 语法来表示 equals。在批处理中,您可以使用EQU等于、NEQ不等于、LSS小于、LEQ小于等于、GTR大于和GEQ大于或等于。if /?有关一些更深入的信息,您可能需要在接下来打开命令提示符时执行。它充满了太多的信息。

这也消除了任何 id10t 用户错误,这意味着用户可以尝试破坏它或错误使用它。

〜烧伤