批处理 - 如何同时运行两个命令?

时间:2017-04-24 14:15:07

标签: batch-file

我认为有人问过类似的问题,但我的情况有点不同。我有这段代码:

@echo off
title Game
set time=1 am
timeout 10 /nobreak >nul & goto game
set time=2 am
:game

如何制作

timeout 5 /nobreak >nul

goto game

同时工作?如果你还没有得到它,我就是这样想的。 超时开始,你在超时结束后玩游戏,它将时间改为凌晨2点。我怎么能同时做到这一点并且玩游戏而不会受到干扰?请帮忙。谢谢!

2 个答案:

答案 0 :(得分:1)

不,鲍勃。如果你对变量time没有任何意见,那么你就是谁。它是由系统设置的保留变量,但可以由用户脚本覆盖。实际上,您可以使用任何其他变量名称 - 不是timedatepathrandom和其他几个。

关于你的问题,

set "mytime=1 am"
call :starttimer
:game
... whatever

:getinput
set "response="
set /p "response=%~1"
if not exist timerfinished.txt goto :eof
:: here change "mytime"
set "mytime=2 am"
:starttimer
start /min "" timer.bat 10
goto :eof

其中timer.bat

@echo off
del timerfinished.txt 2>nul
timeout %1 /nobreak>nul
echo.>timerfinished.txt
exit

timer.bat文件只删除了标志文件timerfinished.txt,延迟了它收到的第一个参数设置的时间(%1 - 在主代码中设置为10)然后创建档案和退出。

主代码最初使用:starttimer启动计时器,然后每当您想要提示并等待响应时,执行

call :getinput "Prompt for input "

,响应将显示在%response%

请注意,如果用户只需按 Enter

,则此例程中最初将response设置为 nothing 可确保响应为空

好的 - 所以在您输入响应之前,使用此方案实际上没有发生 ,只有这样才会增加时间并且游戏会以更新的时间继续。如果您期望超时结束实际上做了某些事情,那真的 - 这不会发生 - 除非您使用choice输入带有超时选项的回复。

答案 1 :(得分:0)

我认为你正在寻找一个游戏时间",比实时跑得快。

最佳方式:使用另一个脚本在单独(最小化)窗口中设置游戏时间变量(如下所示)。每当你需要访问当前的游戏时间&#34;在主脚本中,使用<gametime.dat set /p "gametime="

GAMETIME.BAT:

@echo off
set gametime=10:00
for /f "tokens=1,2 delims=:" %%a in ("%gametime%") do (
  set hours=%%a
  set mins=%%b
)
:loop
call :increase_gametime
timeout 5 >nul
goto :loop

:increase_gametime
 set /a mins+=10
 set /a hours=hours+mins/60
 set /a mins=mins%%60
 set gametime=%hours%:%mins% 
 title %gametime%
>gametime.dat echo %hours%:%mins%