2017-07-26 32 views
0

当前我正在处理批处理文件以连续执行X号的命令。秒,并在经过X后,我希望使用goto函数重定向它。连续循环(不停顿)“X”秒

这是最接近我想要的代码。

:MainMenu 
set yourno= 
set /p yourno=Input your number: 
set /p looptime=Input time: 
goto PerformCalc 

:PerformCalc 
set /a yourno= %yourno%+1 
timeout 1 
set /a looptime=%looptime%-1 
goto CheckLoop 

:CheckLoop 
if %looptime% equ 0 goto FinishScreen 
goto PerformCalc 

:FinishScreen 
echo Congratulations Your no. is %yourno% 
echo Operations completed in %looptime% seconds 
pause 

现在上述代码的问题是如果我设置循环时间为10秒,它将只执行10个操作。但这不是我想要做的。我意识到我已经在我的代码中输入了timeout 1,并且每次经过1秒就减少1。然而,这是因为我无法找到一种方法连续循环代码10秒,而不使用超时1,从而暂停它只执行10个操作。

如果你还没有明白我的意思,这里是代码应执行的逻辑流程(说的如:用户输入LOOPTIME为10秒

For Time=10seconds 
Do {set /a yourno= %yourno%+1 continuously} 
After Time of 10 seconds has elapsed redirect to :FinishScreen 

谢谢你们的帮助。

回答

1
@echo off 
setlocal 

rem Get end time 
set seconds=10 
for /F "tokens=1-4 delims=:.," %%a in ("%time: =0%") do set /A "endTime=1%%a%%b%%c%%d+seconds*100" 

echo Start: %time% 
echo Working %seconds% seconds, please wait... 

set yourNo=0 
:loop 
set /A yourNo+=1 

rem Check if end time had been reached 
for /F "tokens=1-4 delims=:.," %%a in ("%time: =0%") do if 1%%a%%b%%c%%d lss %endTime% goto loop 

echo End: %time% 
echo This program could complete %yourNo% loops in 10 seconds 

这种方法可能会失败,如果处理时间传过午夜,但一个简单的调整就可以解决这个问题,如果需要的话...

+0

嗨。虽然我找到了一个替代的方式来工作的伎俩,我想日为你的努力而努力。 你也可以解释这是什么? 'do set/A“endTime = 1 %% a %% b %% c %% d + seconds * 100' – x0nar