2017-04-24 244 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

我遊戲時間不是實時:) –

相關問題