Ilyansk
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору хотел поместить в шапку в раздел "работа с датой...", а попало сюда :/ батник расчета длительности процессов Может кому интересно, батник расчета длительности процессов, выдающий результат на экран в виде часов минут секунд. Десятые доли секунд не учитывет. Работает - если время окончания (HH:MM:SS[.DD]) БОЛЬШЕ времени начала. У себя использую для расчета времени создания резервной копии. Батник копии стартует в 0:10 и первой строкой пишет время в файл _start.txt (%time% > _start.txt), по окончании соответственно в _finish.txt Есть еще батник проверки результатов (сравнивает даты и пр.), туда и встроены строки Код: for /f "tokens=2 delims= " %%Q in (f:\archive\_start.txt,f:\archive\_finish.txt) do call :coll %%Q call calc_time !t1! !t2! goto :eof :coll set /a i+=1 & set t!i!=%1 goto :eof | ну и сам calc_time.bat (код дополнен (выводит текстовую часть сообщения, заданного пользователем) и отлажен, согласно замечанию уважаемого wolf0425, которое последует после ) пример вызова calc_time 13:26:06.23 18:01:06.76 На всё-про всё ушло выдаст: На всё-про всё ушло 4 ч. 35 мин. Свой текст можно опустить. По умолчанию сообощение "Процесс длился около N час. М мин. С сек." поместив пост, увидел некоторое излишество кода и поправил. В итоге в строке set /a SEC%1=%2 * 3600+%3 * 60+%4 у 3600 случайно удалил один ноль и получилось 360, что и приводило к ошбкам в расчетах. Прошу прощения у сообщества Код: @echo off setlocal enabledelayedexpansion if "%1" == "" goto :nopars set t1=%1 & set t2=%2 :aga if "%3"=="" (goto :nx) else ( set msg=!msg! %3 shift goto :aga ) :nx for /L %%I in (1,1,2) do call :razb %%I goto :nxt :razb for /f "tokens=1,2,3,4 delims=:." %%T in ("!t%1!") do call :msec %1 %%T %%U %%V goto :eof :msec set /a sec%1=%2 * 3600 + %3 * 60 + %4 goto :eof :nxt set /a diff=SEC2-SEC1 set "ch=0" & set "och=0" & set "min=0" & set "omin=0" & set "ss=0" set /a ch=diff/3600 & set /a och=diff-(ch*3600) set /a min=och/60 & set /a ss=och-(min*60) if !ch! gtr 0 (set "out=!ch! ч.") if !min! gtr 0 (set "out=!out! !min! мин.") if !ss! gtr 0 (set "out=!out! !ss! сек.") if not defined msg (echo Процесс длился около !out! ) else ( echo !msg! !out! ) goto :fin :nopars echo Usage: calc_time start_time finish_time [message's words] echo format for times: HH:MM:SS[.DD] echo Finish time must be greater start ping -w 2000 127.0.0.1 > nul :fin |
| Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 10:28 08-02-2008 | Исправлено: Ilyansk, 06:32 06-03-2008 |
|