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

问题描述 投票:0回答:1

我正在制作一个批处理文件游戏(我知道这并不是真正的游戏)。我需要运行

set /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

即使他们不选择选项,我也希望它能给他们钱,这样他们每秒都能得到钱。

batch-file
1个回答
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 度过愉快的一天:)

© www.soinside.com 2019 - 2024. All rights reserved.