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

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

V!RTuE 17-02-2016 12:01 2607001

Вычисление времени работы скрипта
 
нашел такой вот код:
Код:

@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 2607004

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

V!RTuE 17-02-2016 12:21 2607009

Цитата:

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

а в данном коде тогда где это дописать нужно?

Elven 17-02-2016 13:31 2607030

Вынужден признать, что мое предположение оказалось ошибочным.
Дело было не в неправильном понимании 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 и вводом двух переменных, но мне лень, простите уж...


Время: 11:01.

Время: 11:01.
© OSzone.net 2001-