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

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

vlad_exe@vk 12-05-2012 15:32 1914595

подсчёт времени запущенного процесса redebook.exe
 
Мне необходим bat чтобы он вел подсчёт времени запущенного процесса redebook.exe ток чтобы не сильно грузило комп .
Возможно что то в этом роде

Код:

@Echo Off

Здесь начинается сохранения времени  например сейчас 13:45:12

:test
Ping -n 4 127.0.0.1>nul
setlocal ENABLEDELAYEDEXPANSION
Set Process=redebook
tasklist | Find /i "%Process%.exe" || (goto Else)
:THEN
goto test
Goto end
:ELSE

Здесь когда процесс завершен идёт замер нового времени 15:51:16
Ну и потом 13:45:12 - 15:51:16 = 02:06:04
НУ и обработок остального


==================================
С:\WINDOWS\system32\cmd.exe
==================================
Start : 13:45:12
Сompleted : 15:51:16
Worked : 02:06:04
Last session : 01:02:01
Total: 0 days 20:11:12

Press any key to exit
==================================

Start : Время старта
Сompleted : Время закрытия
Worked : Время работы
Last session : Последние время работы
Total: 0 days Общие дни и время работы

Общие время и последние время работы должно сохранятся в config.cfg
Этот скрипт на подобии http://forum.oszone.net/thread-234460.html Вот этой темы .
Помогите плиз )))

Iska 12-05-2012 16:50 1914652

vlad_exe@vk, объясните, зачем сие вообще нужно, и что нужно будет в конечном итоге.

vlad_exe@vk 13-05-2012 00:56 1914903

Вообще то применений много , но хотя бы для игры , ведь так быстро летит время именно в играх , тут ты выходишь с игры и видишь сколько ты потратил жизни на эту бесполезную вещь )))

Iska 13-05-2012 01:45 1914914

Пакетный файл — не лучший выбор для этого, хотя и возможный; примеры работы с разницей двух значений даты/времени на форуме есть, хотя бы в той же самой теме. В чём проблема-то?!

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

vlad_exe@vk 13-05-2012 02:46 1914928

Спасибо Кеп это моя тема .

Iska 13-05-2012 05:02 1914940

Цитата:

Цитата vlad_exe@vk
Спасибо Кеп это моя тема . »

Я умею читать, и видел, что то — именно Ваша тема. Моя ссылка ведёт на конкретный пост в той теме.

Anonymоus 13-05-2012 09:34 1914970

vlad_exe@vk, но зачем периодически делать проверку наличия процесса с определённым интервалом, это в корне неверный подход. Записать время старта, вызвать нужный процесс через Call, и когда он завершен - еще раз замерить время и высчитать разницу. Не трудно, правда? Тем более, примеры сравнения двух timestamp-ов у вас есть.

Iska 13-05-2012 10:03 1914977

Цитата:

Цитата Anonymоus
вызвать нужный процесс через Call »

«start /wait»?!

vlad_exe@vk 13-05-2012 14:55 1915103

Anonymоus Не знаю , просто хочется чтобы всё было на автомате .
Я только начинающий скриптер для меня это сложновато .

Мне хотелось бы понять саму команд снятия показателей времени чтобы преобразовать его в %HH% %MM% %SS%
чтобы его можно было видать командой
echo. %HH%:%MM%:%SS%
Пожалуйста можете мне написать её отдельно внизу )

Anonymоus 13-05-2012 18:22 1915217

vlad_exe@vk, то, что я предлагаю - и есть "на автомате". Только вместо кучи лишней работы вида
Цитата:

Цитата vlad_exe@vk
tasklist | Find /i "%Process%.exe" || (goto Else) »

я предлагаю вам:
1) замерить время
2) запустить программу, дождавшись ее закрытия
3) когда батник продолжит работу после закрытия программы, еще раз замерить время и высчитать разницу.
Время - %time%
Время БЕЗ милисекунд - %time:~-0,8%
Разбор времени в HH, MM и SS:
Код:

For /F "tokens=1,2,3 delims=:" %%A In ("%time:~-0,8%") Do (
Set HH=%%A
Set MM=%%B
Set SS=%%C
)

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

vlad_exe@vk 14-05-2012 12:18 1915612

Хмм наверное я тупой :cry: )))я никак не пойму но мне надо проделать вот такое

Код:

For /F "tokens=1,2,3 delims=:" %%A In ("%time:~-0,8%") Do (
Set HH=%%A
Set MM=%%B
Set SS=%%C
)

тут команда ( ждать завершения процесса пока не понял какая )

For /F "tokens=1,2,3 delims=:" %%A In ("%time:~-0,8%") Do (
Set HH2=%%A
Set MM2=%%B
Set SS2=%%C
)


потом команда

------------------------=
%HH%-%HH2%=H
%MM%-%MM2%=M
%SS%-%SS2%=S
------------------------=
вряд ли оно так )))

echo. %H%:%M%:%S%

pause

напилите пожалуйста пример такого скрипта может разберусь )) :cool:

Anonymоus А можно спросит , какое у вас образование ? вы программист ?

gora 15-05-2012 15:52 1916388

Цитата:

Цитата Anonymоus
1) замерить время
2) запустить программу, дождавшись ее закрытия
3) когда батник продолжит работу после закрытия программы, еще раз замерить время и высчитать разницу.
»

Все это хорошо, только у топикстартера не сказано, что запущенный процесс redebook.exe и запускаемая программа это одно и тоже.
Если запускаемая программа Game.exe запускает процесс redebook.exe и сама закрывается, то такой вариант не сработает. :(

2 vlad_exe@vk нужно точнее формулировать задачу
Цитата:

Цитата vlad_exe@vk
применений много , но хотя бы для игры »

Это не постановка задачи.

Здесь есть совсем простенькое решение для варианта без дочерних процессов.

Anonymоus 15-05-2012 16:21 1916405

Цитата:

Цитата vlad_exe@vk
Код:

%HH%-%HH2%=H
%MM%-%MM2%=M
%SS%-%SS2%=S

»

Ну, если бы всё так просто было. А вот допустим, у нас старт программы в 23:55:01, а завершение в 01:12:37. Что в этом случае ваш код насчитает, 22 часа 43 минуты и -36 секунд?
Не забывайте, что минуты и секунды - это шестидесятеричная система счисления, в которой Set /A работать увы, не умеет. А часы - принятое у нас деление на 24, хорошо, что не нужно реализовывать европейское 2х12, am и pm. Следовательно, если bat не умеет работать с такими системами счисления, что нужно сделать? Перевести в понятное командному интерпретатору windows счисление, десятичное к примеру. Для этого в том примере, что был дан вам в прошлой теме, я использую две функции - сериализацию времени, и соответственно, его десериализацию. Сначала переводим все данные в секунды, это десятичное число не превышает возможностей арифметики командного процессора, и с ним можно уже работать - вычитать, прибавлять и осуществлять более сложные операции. При этом не стоит забывать о переполнении раз в сутки, тот же пример со стартом в 23:55:01 и завершением в 01:12:37. И только после всех необходимых рассчетов с сериализованным временем его можно десериализовать и вывести понятный человеку результат. Вполне логично это будет организовать в виде функций с передаваемыми им аргументами.
Цитата:

Цитата vlad_exe@vk
какое у вас образование ? вы программист »

Нет. Немного балуюсь скриптовыми языками - перл, питон, но это именно что баловство. Если вы клоните к тому, что предлагаемые решения слишком сложны для гуманитария, то разочарую вас, это не так. Тут никакого матана не нужно, достаточно лишь логического мышления.

Цитата:

Цитата gora
Если запускаемая программа Game.exe запускает процесс redebook.exe и сама закрывается, то такой вариант не сработает. »

Да, вы правы, я немного поспешил с выводами. Но как мне кажется, лучше всегда исходить из наиболее простого варианта, усложнить никогда не поздно, в том числе, и с отслеживанием по имени процесса\дочерним процессам.

Iska 15-05-2012 23:02 1916641

Цитата:

Цитата gora
2 vlad_exe@vk нужно точнее формулировать задачу »

Именно! Причём, чем конкретнее, тем лучше.


Время: 00:42.

Время: 00:42.
© OSzone.net 2001-