Простая, казалось бы, задачка – вывод длительности выполнения 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
Комментариев нет:
Отправить комментарий