CMD/BAT - [решено] Вычисление времени работы скрипта

Ответить
Аватара пользователя
V!RTuE

CMD/BAT - [решено] Вычисление времени работы скрипта

Сообщение V!RTuE »

нашел такой вот код:



Код:

Код: Выделить всё

@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

Re: CMD/BAT - [решено] Вычисление времени работы скрипта

Сообщение Elven »

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

Re: CMD/BAT - [решено] Вычисление времени работы скрипта

Сообщение V!RTuE »

Цитата Elven:



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




а в данном коде тогда где это дописать нужно?
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Вычисление времени работы скрипта

Сообщение Elven »

Вынужден признать, что мое предположение оказалось ошибочным.

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

Вернуться в «Скриптовые языки администрирования Windows»