2017-04-24 65 views
0

我想有人问过类似的问题,但我的情况有点不同。我有这样的代码:批处理 - 如何在同一时间运行两个命令?

@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点。我怎么能在同一时间做到这一点,玩游戏而不被打扰?请帮忙。谢谢!

+0

如果您不延迟脚本,超时的意义何在? – SomethingDark

+1

不要弄乱系统变量'%time%'。 '1 am'肯定不是一个有效的值。 – Stephan

+0

这是一个有效的值。我试过了,只是时间没有起作用。 –

回答

0

i 认为您正在寻找一个“游戏时间”,比实时运行速度更快。

最佳方式:使用另一个脚本在单独的(最小化)窗口中设置游戏时间变量(如下所示)。无论何时您需要访问主脚本中的当前“游戏时间”,请使用<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% 
+0

非常感谢! :) –

1

不,鲍勃。 '你是谁,没有得到关于变量time的观点。它是由系统设置的保留变量,但可以由用户脚本覆盖。几乎任何其他变量名称,你可以使用 - 只是不timedate, path, random和一些其他。

至于你的问题,

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%

注意,在这个常规设置response什么最初确保响应是空的,如果用户只需按下输入

OK - 所以没有什么实际发生直到你输入的响应使用此方案只有这样,时间才会增加,并且游戏继续更新时间。如果您希望超时结束实际上做了某些事情 - 实际上这不会发生 - 除非您使用choice通过超时选项输入您的响应。

+0

我游戏时间不是实时:) –

相关问题