Время выполнения скрипта в txt
Нужно измерить время выполнения батника.
Задача по сути проста и решение многим пригодится, но вот реализацию в инете не нашёл.
Нужно в батник запихнуть код, который будет создавать текстовый файл в папке с батником. В txt-файле будет указана дата и время запуска батника и сколько минут он выполнялся. TXT файл не должен удалятся или перезаписываться. В него должно дописываться каждое новое выполнение скрипта.
Буду благодарен за помощь.
|
Petya V4sechkin |
06-08-2018 19:51 2825140 |
s.i.p.a, примеры в теме:
Calculate time difference in Windows batch file
Для себя использую упрощённый вариант без учёта локализации, с точностью до секунд (без сотых долей) и разницей в пределах 24 часов:
Код:
@Echo Off
SetLocal EnableDelayedExpansion
Set LogFile=timeLog.txt
Set Date1=!Date!
Set Time1=!Time:~0,-3!
Здесь вставьте команды, время выполнения которых надо измерить.
Set Date2=!Date!
Set Time2=!Time:~0,-3!
Set T1=!Time1: =0!
Set T2=!Time2: =0!
Set /A TimeDiff=1!T2:~6,2!-1!T1:~6,2!+60*^(1!T2:~3,2!-1!T1:~3,2!^)+3600*^(1!T2:~0,2!-1!T1:~0,2!^)
If !TimeDiff! LSS 0 Set /A TimeDiff+=86400
Set /A SS=TimeDiff%%60+100,TimeDiff/=60,MM=TimeDiff%%60+100,HH=TimeDiff/60
Set TimeDiff=!HH!:!MM:~1,2!:!SS:~1,2!
If Exist %LogFile% Echo.>>%LogFile%
(
If !Date1!==!Date2! (
Echo Начало: !Date1! !Time1: =! Завершение: !Time2: =!
) Else (
Echo Начало: !Date1! !Time1: =! Завершение: !Date2! !Time2: =!
)
Echo Время выполнения: !TimeDiff!
)>>%LogFile%
|
Код:
@Echo Off
Set "Log=Z:\Box_Out\logfile.txt"
Set "Mess=%~nx0 Start=%Date%-%Time%"
Call :Minutes "%Date% %Time%" "Day1" "Min1"
rem Здесь код, продолжительность исполнения которого измеряем (в минутах)
Call :Minutes "%Date% %Time%" "Day2" "Min2"
Set /A DOld=(%Day2%-%Day1%)*1440+%Min2%-%Min1%
>>"%Log%" Echo %Mess% End=%Date%-%Time% Duration=%DOld% min
GoTo :Eof
:Minutes
SETLOCAL
FOR /F "tokens=1,2,3,4,5 delims=.:,/ " %%i IN ("%~1") DO Set "Day=0%%i" &Set "Month=0%%j" &Set "Year=%%k" &Set "Hour=0%%l" &Set "Min=0%%m"
Set /A Day=1%Day:~-2%-100
Set /A Month=1%Month:~-2%-100
Call :JulianDay %Day% %Month% %Year% "Day"
ENDLOCAL &(Set /A %~2=%Day% &Set /A %~3=1%Hour:~-2%*60+1%Min:~-2%-6100)
GoTo :Eof
:JulianDay
Set /A %~4=(1461*(%3+4800+(%2-14)/12))/4+(367*(%2-2-12*((%2-14)/12)))/12-(3*((%3+4900+(%2-14)/12)/100))/4+%1-32075
Exit /B
Код может исполняться сутками
|
Спасибо ребята. Код рабочий. Очень помогли.
|
Время: 20:08.
© OSzone.net 2001-