![]() |
Прошу помощи с доработкой скрипта таймера
Здравствуйте.
Приношу свои извинения за беспокойство. Возник вопрос, проблема: На форуме нашел скрипт таймера, Скрипт отличный! Применяю для замера времени выполнения скрипта. (архивация, разархивация, копирование, сканирование) Но то работает, то криво... Оказалось, когда время в часах, в системе обозначены двухзначным числом (10-23часов) скрипт работает! Ежели запуск происходит ночью-утром, где часы измеряются одним числом (0-9 часов) то... Например, если процесс замера попал на смену утренних часов 06.40.29--7:04:43 результат выводиться как = 0:-35:-50 (минусы) ...также бывают ошибки в виде результата в 1-5секунд, вместо более часовой работы скрипта (скорее по той же причине). Прошу помощи: Помогите с доработкой/решением что бы исправить вышеобозначенный баг. Заранее всем откликнувшимся БОЛЬШОЕ СПАСИБО! Скрытый текст
Код:
SetLocal enabledelayedexpansion |
blacks2, переходите на WSH/PoSH, где не требуются подобные извращения для работы с датой/временем в принципе.
|
Тут проблема что время берётся из непродуманной переменной %тайм%.
Возьми патентованный запрос к вмик от Мегаломана и будет тебе счастье. Код:
call :CurrentTimeDate |
Цитата:
Код:
$watch = [System.Diagnostics.Stopwatch]::StartNew() |
Даже скрипт не нужен, есть Measure-Command https://docs.microsoft.com/powershel...easure-command
|
Цитата:
Данные термины мне пока ни о чем не говорят (не проггер/системщик) Погуглю, а после нужно будет поискать решение к таймеру. Цитата:
И за пример! Попробую методом тыка (не проггер) добавить в сборку и протестировать Позже отпишусь. Цитата:
Буду пробовать в сборке. По результатом отпишусь что выбрал. * погуглил, посмотрел бегло, понял: ведь то PowerShell (видимо то самое PoSH), но я в нем вообще не силен (ранее ниже, в ответе Vadikan описал) так, что даже не знаю как вывести полученные данные в echo внутри CMD, да и сам PoSH запустить внутри CMD =((( (домашняя сборка скрипта, для тестирования вариантов времени/размера бекапа и вывода результата в лог) Цитата:
Но я пока в PowerShell совсем ньюб, даже не знаю как вызвать внутри CMD запуск PS, передать в него и из него, в CMD переменные, для последующей обработки-отображения. Поэтому снипеттами собираю что найду/пойму * собираемый скрипт нужен просто для себя: произвести тест скорости бекапа оптимальные для моей домашней системы на время/сжатие, вывести в лог |
Цитата:
А так... archive.cmd Код:
7z a C:\test\archive.zip C:\temp Код:
Measure-Command {C:\temp\archive.cmd} |
Код:
@set @E=1; /* |
ОБРАЩЕНИЕ ОБЩЕЕ:
Sript_by_kjuoky
Код:
call :CurrentTimeDate Как понимаю отлично работает с формированием времени нежели %time% Решение видимо хорошее. А вот анализ времени работы скрипта возможен по «костылю-расчету в Exel»: (может кому пригодиться) 1. получаем дату и время старта/финала в log.csv = 13.3.2012 6:30 / 13.3.2012 7:30 2. далее в каждом новом логе... в exel, ручками, по каждой строке создаем итог-формулу: «13.3.2012 6:30-13.3.2012 7:30» (минус) + ПКМ: формат ячеек-числовые форматы-все форматы... "[ч]:мм" ОБРАЩЕНИЕ К Vadikan Цитата:
Код:
Measure-Command {C:\temp\archive_v01.cmd} (для xcopy, robocopy, 7zip, rar… подставляются значения настроек в виде переменных и отправляются на цикл с фиксацией времени исполнения, старта, финиша, размера…) 2. Приведенный вами пример и немедленное несколько часов изучения PowerShell родили такую строку: Код:
Measure-Command {start-sleep 10} |select @{n="time";e={$_.Hours,$_.Minutes,$_.Seconds,$_.Milliseconds -join ":"}} >> "t:\log_Measure3.txt" Код:
time Метод тыка не помог…. К тому, нужно еще как-то получить: - время начала работы скрипта архивации - время финала работы скрипта архивации После собрать переменные из уже написанного cmd и вывести все в одну строку лога CSV: - номер - название - переменную размера полученного бекапа - переменную % сжатия относительно папки-источника - время работы скрипта архивации (Measure-Command) - время начала работы скрипта архивации - время финала работы скрипта архивации Что бы в логе CSV получилась одна строка, разделенная «;» А после нее следущая строка - с новым вариантом… Все то работает в уже готовом CMD, окромя подсчета на процесс в ночное время (тема топика) А как все это реализовать в чистом PowerShell /+CMD -- не имею понятия Время на изучение-написание наверно выйдет куда более ручного/кастыльного * «Хороший повод освоить на практической задаче и обойтись без cmd» но наверное в моем случае не логично: протестировать 20-30 вариантов бекапов на 2-3х машинах / и изучить PowerShell = 40-60 вариантов можно ручками с секундомером = сутки/2 дня - а изучить PowerShell = времени поболее думаю понимаю, то рост, опыт, знания =)… к сожалению сейчас очень ограничен в времени. сейчас PowerShell мне = как бабушке HTML с нуля Готового решения не нахожу =( ОБРАЩЕНИЕ К Megaloman Цитата:
Обрадовался вновь вам уважаемый megaloman Думал «Чудо! Вот оно! Готовое решение!» :o :cry: Скопировал, расскоментировал timeout /T 7 поменяв на 125 Результат: Код:
1606000571219 184 0.03.04 к сожалинию, моих знаний не хватает понять: - где и как 125сек = 1606000571219 184 0.03.04 - %Out% %TDel% %TTime% + в CH866 не работает, только в UTF-8 Подскажите пожалуйста, что не так? Спасибо! |
Вложений: 1
blacks2,
Цитата:
1606056755388 125 0.02.05 1606056755388 это время Вам не нужно, оно нужно для корректного измерения интервала (в скрипте описано), например, следующего куска кода. Эта цифирь идёт на вход js-скрипта. Я её выдал ради интереса. 125 - это секунды между двумя замерами. 0.02.05 - это нуль часов две минуты 5 секунд между двумя замерами. Что надо, то и печатайте. Соответственно у Вас 184сек= нуль часов три минуты четыре секунды |
Цитата:
Код:
measure { Цитата:
Код:
[math]::Round((Measure-Command {start-sleep 10}).TotalMinutes,2) Цитата:
|
Цитата:
и я не верил… а сейчас... верю и не верю: запустил ваш - работает запустил "свой" - работает в своем из 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= Огромное вам СПАСИБО 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 - получится железобетонное для новичка решение Цитата:
Попозже сегодня поподробнее посмотрю что смогу расковырять на основе ваших направлений к изучению Да, про опыт вы верно сказали. Тоже самое было вначале с CMD =) :bow: |
Цитата:
Я просто унифицировал обе строки. В последующих For через пробел js выдаёт три величины Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
megaloman Vadikan Благодарю вас за помощь и советы! Собрал - заработало. ps тема топика решена |
Время: 02:16. |
Время: 02:16.
© OSzone.net 2001-