2015-07-11 3 views

ответ

4

Я получил %TIME% как текущее время и проанализировал его, чтобы получить текущую секунду. Я сделал это на каждой итерации вашего цикла. Если желаемое время не потрачено на цикл, (определяется как loopDuration), то продолжите следующую итерацию.

echo off 

:: Set your loop duration 
set /a loopDuration=2 

:: Get starting second 
set "startingTime=%TIME:~6,2%" 
set /a startingTime=%startingTime% 

:SET 

    echo %random%%random%%random%%random%%random%%random%%random%%random%%random% 

    :: Get current second 
    set "currentTime=%TIME:~6,2%" 
    set /a currentTime=%currentTime% 

    if %currentTime% lss %startingTime% (
     set /a currentTime=%currentTime% += 60 
    ) 

    set /a timePassed=%currentTime%-%startingTime% 

:: If desired time has not passed, continue the loop 
if not %timePassed% equ %loopDuration% (goto :SET) 

EDIT:

Я также проверил особый случай здесь благодаря Stephan. В этом случае, если startTime имеет значение 59 или что-то близкое к 60, очень вероятно, что currentTime будет иметь значение меньше, чем startTime. Я проверил это с простым, если заявлением:

if %currentTime% lss %startingTime% (
    set /a currentTime=%currentTime%+=60 
) 

Таким образом, нет никакой возможности, что CURRENTTIME будет меньше, чем startingTime. Если вы не хотите, чтобы ваш цикл работал более 59 секунд.

+2

попробуйте это со временем 'xx: xx: 59' ... это будет две очень длинные секунды. – Stephan

+1

Привет, где я могу поместить время в скрипт? Спасибо, что любил ваш ответ! – Cool841

+1

@ Cool841 Время в секундах находится в переменной '% loopDuration%'. Обратите внимание, что это будет работать только со временем менее 60 секунд (что, по-видимому, идеально соответствует вашим требованиям) – Stephan