Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Прошу помощи с доработкой скрипта таймера

Ответить
Настройки темы
CMD/BAT - [решено] Прошу помощи с доработкой скрипта таймера

Пользователь


Сообщения: 99
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: blacks2
Дата: 22-11-2020
Здравствуйте.
Приношу свои извинения за беспокойство.
Возник вопрос, проблема:


На форуме нашел скрипт таймера,
Скрипт отличный! Применяю для замера времени выполнения скрипта.
(архивация, разархивация, копирование, сканирование)

Но то работает, то криво...
Оказалось, когда время в часах, в системе обозначены двухзначным числом (10-23часов) скрипт работает!
Ежели запуск происходит ночью-утром, где часы измеряются одним числом (0-9 часов)
то...

Например, если процесс замера попал на смену утренних часов 06.40.29--7:04:43
результат выводиться как = 0:-35:-50 (минусы)
...также бывают ошибки в виде результата в 1-5секунд, вместо более часовой работы скрипта
(скорее по той же причине).


Прошу помощи:
Помогите с доработкой/решением что бы исправить вышеобозначенный баг.


Заранее всем откликнувшимся БОЛЬШОЕ СПАСИБО!


Скрытый текст
Код: Выделить весь код
SetLocal enabledelayedexpansion


:: сниппет не относится к вопросу-скрипту, но применется в сборке
:: оставил его здесь, вдруг ошибка может быть из-за него
set dd=%DATE%
set tt=%TIME%
set /a ddd=%dd:~0,2%
IF %ddd% LSS 10 (
    SET day=0%ddd%) else (
    SET day=%ddd%)
set month=%dd:~3,2%
set year=%dd:~6,4%
set /a ttt=%tt:~0,2%
IF %ttt% LSS 10 (
    SET hour=0%ttt%) else (
    SET hour=%ttt%)
SET minute=%tt:~3,2%
SET sec=%tt:~6,2%
SET datetimef=%year%.%month%.%day%
SET datetimef_m=%year%.%month%.%day%_%hour%.%minute%
SET datetimef_s=%year%.%month%.%day%_%hour%.%minute%.%sec%
SET datetimef_hms=%hour%.%minute%.%sec%
SET ttm1=%time:~,-3%
:: // конец сниппета




:: применение скрипта
call :SectorSRT
    7z...
call :SectorEnd
    echo Final time: %worktime_HH%:%worktime_MM%:%worktime_SS%
    echo Pause
    pause



:: собственно сам скрипт
:SectorSRT
    set tstart=%time%
    set begin_HH=1%time:~0,2%
    set /a begin_HH=%begin_HH%-100
    set begin_MM=1%time:~3,2%
    set /a begin_MM=%begin_MM%-100
    set begin_SS=1%time:~6,2%
    set /a begin_SS=%begin_SS%-100
goto :EOF

:SectorEnd
    set end_HH=1%time:~0,2%
    set /a end_HH=%end_HH%-100
    set end_MM=1%time:~3,2%
    set /a end_MM=%end_MM%-100
    set end_SS=1%time:~6,2%
    set /a end_SS=%end_SS%-100
    set /a begin=(%begin_HH%*3600)+(%begin_MM%*60)+%begin_SS%
    set /a end=(%end_HH%*3600)+(%end_MM%*60)+%end_SS%
    set /a worktime=%end%-%begin%

    set /a worktime_MM=%worktime%/60
    set /a worktime_SS=%worktime%-%worktime_MM%*60
    set /a worktime_HH=%worktime_MM%/60
goto :EOF

Отправлено: 00:44, 22-11-2020

 

(*.*)


Сообщения: 36489
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Цитата blacks2:
получается вызов из PowerShell необходимо будет делать так:
...
Вместо цикла прописанного в CMD в текущем варианте, будет 20-30 файлов cmd… »
Ну зачем же так в лоб воспринимать.
Код: Выделить весь код
measure {
команды/батники
}
measure {
команда
}
Цитата blacks2:
Приведенный вами пример и немедленное несколько часов изучения PowerShell родили такую строку: »
Что-то сложное они родили. Вот в минутах с округлением до двух знаков
Код: Выделить весь код
[math]::Round((Measure-Command {start-sleep 10}).TotalMinutes,2)
0,17
Цитата blacks2:
Время на изучение-написание наверно выйдет куда более ручного/кастыльного »
Конечно, как всегда бывает с чем-то новым. Но в этот раз, а в следующий - уже нет.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 22-11-2020 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 99
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Не верю!Приложил файл, уберите расширение txt. »
1.
и я не верил… а сейчас...
верю и не верю:
запустил ваш - работает
запустил "свой" - работает
в своем из uts8-866 перекодировал - работает

что было - не понял. ппц


2.
"Подозреваю, раскомментировав timeout, за ним не закомментировали pause." - megaloman
- так точно!
- одновременно с редакцией вашего поста то понял

Спасибо!!


4.
в присланном вами примере (txt)
заметил, что добавилась 3йка, в строке:

Код: Выделить весь код
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`Cscript //NoLogo /E:jscript "%~dpnx0" 0`) DO Set "Out=%%i"
ранее было tokens=1,2

Подскажите пожалуйста, как правильней
Так как я ни "бум-бум" что есть tokens=

Огромное вам СПАСИБО megaloman!!!



ПС
Думаю, надеюсь:

Взяв ваше megaloman решение, на подсчет затраченного времени
И решение от kjuoky на отображение точного времени:
:CurrentTimeDate
for /f "tokens=2 delims==." %%a in ('wmic os get localdatetime /value') do set "n=%%a"
set timerecho=[%n:~0,4%.%n:~4,2%.%n:~6,2% %n:~8,2%:%n:~10,2%]
goto :eof

- получится железобетонное для новичка решение


Цитата Vadikan:
Конечно, как всегда бывает с чем-то новым. Но в этот раз, а в следующий - уже нет. »
Прочел ваш ответ. Благодарю.
Попозже сегодня поподробнее посмотрю что смогу расковырять
на основе ваших направлений к изучению

Да, про опыт вы верно сказали.
Тоже самое было вначале с CMD

Последний раз редактировалось blacks2, 22-11-2020 в 19:10.


Отправлено: 19:04, 22-11-2020 | #12


Ветеран


Contributor


Сообщения: 2706
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата blacks2:
ранее было tokens=1,2 »
В той строке вообще можно обойтись без tokens=....
Я просто унифицировал обе строки.
В последующих For через пробел js выдаёт три величины
Цитата megaloman:
// На выходе текущее время (мсек с полуночи 1 янв 1970)
// текущее-начальное (сек)
// текущее-начальное (часы.мм.cc) »
В For они последовательно попадают в переменные цикла %%i %%j %%k, которые соответственно присваиваются переменным %Out% %TDel% %TTime%

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:22, 22-11-2020 | #13


Пользователь


Сообщения: 99
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата megaloman:
В For они последовательно попадают в переменные цикла »
Спасибо.

Отправлено: 19:49, 22-11-2020 | #14


Пользователь


Сообщения: 99
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата kjuoky:
Тут проблема что время берётся из непродуманной переменной %тайм%. »
Цитата megaloman:
Я просто унифицировал обе строки. »
Цитата Vadikan:
Ну зачем же так в лоб воспринимать. »
kjuoky
megaloman
Vadikan


Благодарю вас за помощь и советы!
Собрал - заработало.


ps
тема топика решена

Отправлено: 22:31, 24-11-2020 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Прошу помощи с доработкой скрипта таймера

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
ПРОШУ ПОМОЩИ! tolj1937 Тест-форум 0 06-02-2015 22:30
Разное - Прошу помощи renzik Тест-форум 0 19-01-2014 01:42
Прошу помощи... Владимир_Небылица@vk Лечение систем от вредоносных программ 8 05-03-2012 13:27
Разное - прошу помощи shrek27 Тест-форум 4 28-02-2010 11:34
Прошу о помощи!!! Gor2 Хочу все знать 7 15-11-2002 22:07




 
Переход