我正在制作一个批处理文件游戏(我知道这并不是真正的游戏)。我需要运行
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
即使他们不选择选项,我也希望它能给他们钱,这样他们每秒都能得到钱。
您可能必须使用
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 度过愉快的一天:)