1

Тема: CMD/BAT: вычисление времени

Данный скрипт на основе двух временнЫх меток производит корректное вычисление промежутка между ними,т.е. затраченного времени (в пределах 24 часов).

@================================================================
::    Name:         spendtime.bat
::    Language:     win-batch
::    CommandLine: spendtime.bat time1 time2
::    Description: Пример вычисления затраченного времени на основе двух временных меток. 
::                 В качестве разделителя разрядов временной метки - символы из набора [;:,.]
::    Author:         Аскет
@================================================================
 
@echo off
IF "%*"=="" (EXIT /B)
SET T1=%1
SET T2=%2
    ::--------------- РАЗБИЕНИЕ МЕТОК ВРЕМЕНИ НА РАЗРЯДЫ [hh,mm,ss] -------------
for /f "tokens=1,2,3 delims=;:,." %%a in ("%T1%") do (set h1=%%a & set m1=%%b & set s1=%%c)
for /f "tokens=1,2,3 delims=;:,." %%a in ("%T2%") do (set h2=%%a & set m2=%%b & set s2=%%c)
    ::--------------- СЕРИАЛИЗАЦИЯ -------------
set /a time1 = (h1*3600)+(m1*60)+(s1)
set /a time2 = (h2*3600)+(m2*60)+(s2)
    ::--------------- ВЫЧИСЛЕНИЕ -------------
set /a time3=time2-time1
    rem если время начальной точки позже конечной
if /i %time3% lss 0 set /a time3=time2+(86400-time1)
    ::--------------- ДЕСЕРИАЛИЗАЦИЯ [muchSS -> hh,mm,ss] -------------
::hour
set /a H = time3/3600
set /a time3 = time3-(H*3600)
::minute
set /a M = time3/60
set /a time3=time3-(M*60)
::second
set /a S = time3
    ::--------------- ФОРМАТНАЯ КОРРЕКТИРОВКА РЕЗУЛЬТАТОВ -------------
 CALL :CheckNum %H%,H
 CALL :CheckNum %M%,M
 CALL :CheckNum %S%,S
 
set spendTime=%H%:%M%:%S%
::show result
echo ______________________________
ECHO/Spend time = [%spendTime%]
 
EXIT /B
======================
:CheckNum (varIN,varOUT)
    set /A temp_ = %1
    if "%temp_:~1,1%"=="" (SET %2=0%temp_%)
EXIT /B

C:\WINDOWS\>spendtime.bat 11:50:05 10:13:44
______________________________
Spend time = [22:23:39]

>spendtime.bat 3:40 5:44:02
______________________________
Spend time = [02:04:02]