Показать полную графическую версию : Как узнать время работы программы в Windows 7
Добрый день.
Искал на интернете как узнать как долго работает та или иная программа в Windows 7. Нашел этот скрипт (http://forum.oszone.net/post-2570957-7.html), но он к сожалению у любой программы пишит только 0.00:00:00. Может ктонибудь помочь с созданием ВАТ скрипта?
kerk, tasklist /V | find "cmd.exe", например, и обрабатываете вывод, как Вам нужно. Далее - сам не силён в скриптах пока.
glukin, это не то, это время процесора а оно другое чем время программы.
kerk, Ничего не понял. У программы есть процесс в памяти? Есть. У него есть время работы? Есть. Что не так? Или неизвестен процесс, который принадлежит программе?
glukin, время в нем не соответствует настоящему. После 5 минут там 00:00:01.
kerk,Ваша правда, помониторил с полчаса , показывает фигню какую-то. Извините.
kerk,
прекрасно на 7ке работает:
powershell /nologo /noprofile "[int]((get-date) - ((get-process 'AkelPad').starttime)).totalminutes"
kerk, а что Вы вообще позразумеваете под:
время работы программы »
?
Iska, то что написано. Запустил программу в 10:35, запустил ВАТ скрипт в 11:18 и узнал, что программа работает уже 00:00:43.
alpap, я не селен в powershell. Может разъясните куда писать название конкретной программы в ваш код?
kerk, тогда проще будет WSH/PoSH.
Iska, а что это, можно пример?
Пример на PowerShell'е привёл выше (http://forum.oszone.net/post-2714536.html#post2714536) коллега alpap. WSH — Windows Script Host, предшественник PowerShell'а, имеет по умолчанию в комплекте два языка: VBScript и JScript. Например (WSH, VBScript):
Option Explicit
Dim objSWbemObjectEx
With WScript.CreateObject("WbemScripting.SWbemDateTime")
For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'")
.Value = objSWbemObjectEx.CreationDate
WScript.Echo "Notepad worked at " & DateDiff("n", .GetVarDate, Now()) & " minutes"
Next
End With
WScript.Quit 0
куда писать название конкретной программы в ваш код? »
Вместо слова «AkelPad». В мою — вместо «notepad.exe».
Iska, вставил в код название программы vlc.exe
powershell /nologo /noprofile "[int]((get-date) - ((get-process 'vlc.exe').starttime)).totalminutes"
powershell пишит ошибку
Get-Process : Cannot find a process with the name "vlc.exe". Verify the process name and call the cmdlet again.
At line:1 char:33
+ [int]((get-date) - ((get-process <<<< 'vlc.exe').starttime)).totalminutes
+ CategoryInfo : ObjectNotFound: (vlc.exe:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
Cannot find an overload for "op_Subtraction" and the argument count: "2".
At line:1 char:19
+ [int]((get-date) - <<<< ((get-process 'vlc.exe').starttime)).totalminutes
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
VBS код конечно интересный, но хотелось бы на дни:часы:минуты и в BAT/CMD. Это вообще возможно?
Iska, вставил в код название программы vlc.exe »
А надо было вставлять не «vlc.exe», а «vlc». С «.exe» — это для Wbem.
VBS код конечно интересный, но хотелось бы на дни:часы:минуты »
В предыдущем коде заменить вывод на:
WScript.Echo "Notepad worked at " & TimeSerial(0, 0, DateDiff("s", .GetVarDate, Now()))
и в BAT/CMD. Это вообще возможно? »
Возможно. Но уже без меня, ибо вычисления разницы даты/времени на пакетных файлах меня не прельщают. Я для подобных вещей превосходно обхожусь WSH и не вижу никакой нужды в пакетных файлах.
greg zakharov
25-02-2017, 13:36
Возможно. Но уже без меня, ибо вычисления разницы даты/времени на пакетных файлах меня не прельщают. Я для подобных вещей превосходно обхожусь WSH и не вижу никакой нужды в пакетных файлах.А что сложного то в том? Элементарная математика, не более.
VBS код конечно интересный, но хотелось бы на дни:часы:минуты и в BAT/CMD. Это вообще возможно?Более чем.
@echo off
setlocal enabledelayedexpansion
chcp 1251>nul
set "i=0"
for %%i in (%*) do set /a "i+=1"
if %i% neq 1 echo:=^>err : index is out of range&goto:eof
for /f delims^=^"^ tokens^=3 %%i in (
'typeperf "\Процесс(%~1)\Прошло времени (сек)" -sc 1^
^| findstr /irc:":"'
) do 2>nul set /a "s=%%i" % rem : всего секунд
if !s! equ -1 echo:=^>err : process has not been found&goto:eof
set /a "ss=s%%60", "s/=60", "mm=s%%60", "s/=60", "hh=s%%24", "dd=s/24"
for %%i in (%hh% %mm% %ss%) do (
if %%i lss 10 (set "t=!t!0%%i:") else (set "t=!t!%%i:")
)
echo:%dd%.%t:~,-1%
endlocal&chcp 866>nul
exit /b
Пример использования:
C:\> ttime.cmd powershell
13.05:47:23
C:\> ttime.cmd vim
7.11:23:00
О минусах данного подхода: локалезависимость, которую, впрочем, можно обойти; если запущено более одной копии указанного процесса, значение возвращается для более старшего (увы, порочность счетчиков производительности); сам командный сценарий нужно сохранять в win-1251.
А что сложного то в том? Элементарная математика, не более. »
Запутанно и нудно.
greg zakharov, этот код я уже пробовал. Создал фаил test.cmd, потом запуститил командную строку с правами админа и написал C:\> test.cmd vlc.exe (пробовал так-же просто vlc). Наверно чтото делаю не так, так-как выкидывает это
C:\test>test.cmd vlc
0.00:00:00
C:\test>
Хотя VLC работает где-то 22 часа.
greg zakharov
26-02-2017, 10:36
этот код я уже пробовал... Наверно чтото делаю не так...Не наверное, а точно.
http://savepic.net/9023674.png
Как вариант могу предложить локаленезависимый способ.
@echo off
setlocal enabledelayedexpansion
for %%i in (lodctr.exe) do (
if not exist "%%~$PATH:i" (
call:err "could not retrieve required data"
goto:eof
)
)
set "i=0"
for %%i in (%*) do set /a "i+=1"
if !i! neq 1 call:err "argument is out of range"&goto:eof
set "pc=%tmp%\perf.tmp"
lodctr /s:"%pc%"
call:findlocalestr 230 object
call:findlocalestr 684 counter
del /f /q "%pc%"
for /f delims^=^"^ tokens^=3 %%i in (
'typeperf "%object%(%~1)%counter%" -sc 1 ^| findstr /rc:":"'
) do 2>nul set /a "s=%%i"
if !s! equ -1 call:err "process has not been found"&goto:eof
set /a "ss=s%%60", "s/=60", "mm=s%%60", "s/=60", "hh=s%%24", "dd=s/24"
for %%i in (%hh% %mm% %ss%) do (
if %%i lss 10 (set "t=!t!0%%i:") else (set "t=!t!%%i:")
)
echo:%dd%.%t:~,-1%
endlocal
exit /b
:err
echo:=^>err : %~1
exit /b 1
:findlocalestr
for /f "tokens=2 delims==" %%i in (
'find "%~1=" "%pc%" ^| findstr /brc:"%~1="'
) do set "%2=\%%i"
exit /b
greg zakharov, попробовал, запустил последний скрипт ''локаленезависимый способ''. Опять что-то делаю не так?
Может у вас дополнительные программы установлены для таких операций, что-то типа PsTools и поэтому результат другой?
Программа VLC.exe работает уже 30-40 минут.
http://savepic.net/8994993.jpg
greg zakharov
26-02-2017, 12:30
kerk, уважаемый, поясните для каких целей нужно в приведенном примере такое барахло, как pstools, когда используются штатные средства?! И да, что это у Вас за чудная версия 6.6.1.7601? Что-то не припомню таковой.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.