четверг, 16 декабря 2010 г.

Вычисление длительности выполнения batch-скрипта

Простая, казалось бы, задачка – вывод длительности выполнения batch-скрипта. А как дошло до дела, пришлось немного пораскинуть мозгами.
Не буду томить, вот что получилось (при условии непересечения полуночи):

@echo off
setlocal
cls

:: Время начала
set t0=%time%

    :: Тело скрипта
    ping -n 2 127.0.0.1 >nul

:: Время завершения
set t=%time%

:: Вычисление времени начала в миллисекундах от полуночи
if %t0:~0,2% lss 10 (set hh=%t0:~1,1%) else (set hh=%t0:~0,2%) 
if %t0:~3,1%==0 (set mm=%t0:~4,1%) else (set mm=%t0:~3,2%) 
if %t0:~6,1%==0 (set ss=%t0:~7,1%) else (set ss=%t0:~6,2%) 
if %t0:~9,1%==0 (set ms=%t0:~10,1%) else (set ms=%t0:~9,2%) 

set /a start = %hh% * 360000 + %mm% * 6000 + %ss% * 100 + %ms%

:: Вычисление времени завершения в миллисекундах от полуночи
if %t:~0,2% lss 10 (set hh=%t:~1,1%) else (set hh=%t:~0,2%) 
if %t:~3,1%==0 (set mm=%t:~4,1%) else (set mm=%t:~3,2%) 
if %t:~6,1%==0 (set ss=%t:~7,1%) else (set ss=%t:~6,2%) 
if %t:~9,1%==0 (set ms=%t:~10,1%) else (set ms=%t:~9,2%) 

set /a stop = %hh% * 360000 + %mm% * 6000 + %ss% * 100 + %ms%

:: Вычисление длительности в миллисекундах
set /a x = %stop% - %start%

:: Преобразование длительности в формат hh:mm:ss,ms
set /a ms = %x% %% 100
set /a x = (%x% - %ms%) / 100
set /a ss = %x% %% 60
set /a x = (%x% - %ss%) / 60
set /a mm = %x% %% 60
set /a x = (%x% - %mm%) / 60
set /a hh = %x%

:: Добавление предшествующих нулей
if %ms% lss 10 (set ms=0%ms%)
if %ss% lss 10 (set ss=0%ss%)
if %mm% lss 10 (set mm=0%mm%)
if %hh% lss 10 (set hh=0%hh%)

echo %hh%:%mm%:%ss%.%ms%

pause

Для данного примера получится такой результат:

00:00:01.02

Комментариев нет:

Отправить комментарий