Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Время выполнения скрипта в txt (http://forum.oszone.net/showthread.php?t=336049)

s.i.p.a 06-08-2018 14:38 2825083

Время выполнения скрипта в 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%


megaloman 06-08-2018 21:25 2825162

Код:

@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

Код может исполняться сутками

s.i.p.a 08-08-2018 09:57 2825422

Спасибо ребята. Код рабочий. Очень помогли.


Время: 20:08.

Время: 20:08.
© OSzone.net 2001-