Тема: 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]