Войти

Показать полную графическую версию : [решено] Вычисление времени работы скрипта


V!RTuE
17-02-2016, 12:01
нашел такой вот код:
@echo off
set timeS=%time%
pause&:: сюда вставить код
set timeE=%time%
set /a timeMS=100+1%time:~-2%-1%timeS:~-2%
set /a timeSS=60+1%time:~6,2%-1%timeS:~6,2%
set /a timeMM=60+1%time:~3,2%-1%timeS:~3,2%
set /a timeHH=24+1%time:~0,2%-1%timeS:~0,2%
if %timeMS% lss 100 (set /a timeSS-=1) else (set /a timeMS-=100)
if %timeSS% lss 60 (set /a timeMM-=1) else (set /a timeSS-=60)
if %timeMM% lss 60 (set /a timeHH-=1) else (set /a timeMM-=60)
if %timeHH% geq 24 (set /a timeHH-=24)
echo %timeS%
echo %timeE%
echo.%timeHH%:%timeMM%:%timeSS%,%timeMS%
pause
Но он работает не совсем верно. Если скрипт запущен в период с 10:00 до 23:59, то время показывает верно, а если с 00:00 до 09:59, то ровно на 1 час больше. Ну а если вообще запущен до 10 утра, а закончил работу после 10, то аж на 6 часов больше показывает. Как исправить? или есть более точные способы вычисления времени работы?
Надо именно показывать в формате чч:мм:сс

Elven
17-02-2016, 12:12
наверное проблема в том, что с точки зрения cmd, например, 5 и 05 это разные числа (точнее в разных системах счисления). Соответственно для чисел от 0 до 8 нужно дописывать спереди 0.

V!RTuE
17-02-2016, 12:21
наверное проблема в том, что с точки зрения cmd, например, 5 и 05 это разные числа (точнее в разных системах счисления). Соответственно для чисел от 0 до 8 нужно дописывать спереди 0. »
а в данном коде тогда где это дописать нужно?

Elven
17-02-2016, 13:31
Вынужден признать, что мое предположение оказалось ошибочным.
Дело было не в неправильном понимании cmd/bat различных систем счисления (хотя на такое я тоже напарывался), а в лишнем пробеле образующемся при изъятии числа часов для однозначных чисел.
Вот эта строка
set /a timeHH=24+1%timeE:~0,2%-1%timeS:~0,2%
при подстановке приобретает вид: (при двухзначном значении часа, например "13", и, редположим, что час смениться не успел)
set /a timeHH=24+113-113
Так все считается нормально и красиво, но! если количество часов однозначное (например "5", и, опять же, предположим, что час смениться не успел) это выражение превращаеся в
set /a timeHH=24+1 5-1 5
Такую абракадабру бедняга set посчитать уже не осилит.

В результате конечный код может выглядеть как-то так:
@echo off
set timeS=%time%
pause&:: сюда вставить код
set timeE=%time%
set /a timeMS=100+1%timeE:~-2%-1%timeS:~-2%
set /a timeSS=60+1%timeE:~6,2%-1%timeS:~6,2%
set /a timeMM=60+1%timeE:~3,2%-1%timeS:~3,2%
if %timeE:~0,2% LSS 10 (
if %timeS:~0,2% LSS 10 (
set /a timeHH=24+10%timeE:~1,1%-10%timeS:~1,1%
) else (
set /a timeHH=24+10%timeE:~1,1%-1%timeS:~0,2%
)) else (
if %timeS:~0,2% LSS 10 (
set /a timeHH=24+1%timeE:~0,2%-10%timeS:~1,1%
) else (
set /a timeHH=24+1%timeE:~0,2%-1%timeS:~0,2%
))
if %timeMS% lss 100 (set /a timeSS-=1) else (set /a timeMS-=100)
if %timeSS% lss 60 (set /a timeMM-=1) else (set /a timeSS-=60)
if %timeMM% lss 60 (set /a timeHH-=1) else (set /a timeMM-=60)
if %timeHH% geq 24 (set /a timeHH-=24)
echo %timeS%
echo %timeE%
echo.%timeHH%:%timeMM%:%timeSS%,%timeMS%
pause

На мой взгляд правильнее было бы обойтись двумя if и вводом двух переменных, но мне лень, простите уж...




© OSzone.net 2001-2012