在运行其他命令时如何用set / p提示用户?

时间:2019-05-10 17:44:33

标签: batch-file

我正在制作批处理文件游戏(我知道这不是真的用于游戏)。我需要运行set /p,要求用户选择要执行的选项,同时它每秒会增加一定数量的游戏金钱,但我不知道如何同时运行。 / p>

我已经尝试过在for循环中使用它,但是我无法使其正常工作。

这里是一个例子:

:do
::echo choices and ask user which option to do 
echo choice 1
echo choice 2
echo choice 3
set /p choice= what to do: 
if "%choice%" == "1" goto c1
if "%choice%" == "2" goto c2
if "%choice%" == "3" goto c3
::add money
set /a "money=%money%+10"
::wait one second
ping localhost -n 2 >NUL
::do it all again
goto do

即使他们没有选择一个选项,我也希望它能给他们钱,所以他们每秒都会得到他们的钱。

1 个答案:

答案 0 :(得分:1)

您可能必须使用CHOICE,因为SET /P会读取用户输入,直到您给它输入新行为止。

CHOICE有一个参数/T,它可以告诉您n秒后将选择默认选项(使用/D <default key>来设置默认选项)。例如,choice /c 123y /t 1 /d y将等待输入1秒钟,并且如果用户在1秒钟内未按任何键,则仅选择最后一个选项(y)。您还可以通过添加/M "<message>"来显示自定义提示消息,因此您的完整命令是:

choice /c 123y /t 1 /d y /m "what to do:"

%ERRORLEVEL%CHOICE命令提供输出的地方。从1到最后一个字符索引(在这种情况下,y将为4):

if "%errorlevel%"=="1" goto c1
if "%errorlevel%"=="2" goto c2
if "%errorlevel%"=="3" goto c3
rem The last one, which is 4, but because it's the only last option, so you don't need another if statement

在循环的最后,您可能要加钱:

rem Instead of "set /a money=%money% + 10", why you don't use += instead?
set /a money+=10
goto theBeginOfTheLoop

将这些语句组合在一起,我们将有一个简单的goto循环:

:theBeginOfTheLoop
echo money: %money%
echo choice 1 [1]
echo choice 2 [2]
echo choice 3 [3]
choice /c 123y /t 1 /d y /m "what to do: "
if "%errorlevel%"=="1" goto c1
if "%errorlevel%"=="2" goto c2
if "%errorlevel%"=="3" goto c3

set /a money+=10
goto theBeginOfTheLoop

与Batch在一起度过愉快的一天:)