Основываясь на совете, который я дал в своем комментарии, и используя другой метод определения процесса, связанного с PID, вы можете сделать это следующим образом: (при необходимости изменить PID, 5716
, в строке 2
):
@SetLocal EnableExtensions
@Set "PID=5716"
@Set "$Mem="
@For /F "Tokens=2 EOL=N Delims=," %%G In (
'%__AppDir__%wbem\WMIC.exe OS Get TotalVirtualMemorySize^,Version^
/Format:CSV 2^>NUL')Do @For /F "Tokens=2 EOL=N Delims=," %%H In (
'%__AppDir__%wbem\WMIC.exe Path Win32_PerfFormattedData_PerfProc_Process^
Where "IDProcess='%PID%'" Get WorkingSet^,WorkingSetPrivate /Format:CSV^
2^>NUL')Do @Set /A "$Mem=%%H/1024*100/%%G">NUL 2>&1
@If Defined $Mem Echo %$Mem%%%&Pause
Обратите внимание, однако, что если арифметика встретит числа, которые превышают ограничение Set /A
для 32-битных целых чисел со знаком, метод завершится ошибкой. Кроме того, вы должны отметить, что поскольку мы работаем с целыми числами, результат всегда будет округляться в меньшую сторону до ближайшего целого числа. Это означает, что все, что меньше 1%
, будет отображаться как 0%
.
Если я правильно помню, при первом использовании этого метода в любом сеансе возникает задержка, после которой вы обычно заметите значительное увеличение скорости.
Если вы уже знаете имя процесса, которое обычно является именем исполняемого файла без его расширения, тогда вы можете использовать его вместо PID,
(при необходимости измените строку ExecutableFile
в строке 2
на имя вашего процесса):
@SetLocal EnableExtensions
@Set "MyProcess=ExecutableFile"
@Set "$Mem="
@For /F "Tokens=2 EOL=N Delims=," %%G In (
'%__AppDir__%wbem\WMIC.exe OS Get TotalVirtualMemorySize^,Version^
/Format:CSV 2^>NUL')Do @For /F "Tokens=2 EOL=N Delims=," %%H In (
'%__AppDir__%wbem\WMIC.exe Path Win32_PerfFormattedData_PerfProc_Process^
Where "Name='%MyProcess%'" Get WorkingSet^,WorkingSetPrivate /Format:CSV^
2^>NUL')Do @Set /A "$Mem=%%H/1024*100/%%G">NUL 2>&1
@If Defined $Mem Echo %$Mem%%%&Pause
person
Compo
schedule
12.06.2020
set /a
для арифметических функций. См. ss64.com/nt/set.html#expressions. - person Nico Nekoru   schedule 11.06.2020wmic computersystem get TotalPhysicalMemory /value
→WMIC OS Get TotalVirtualMemorySize /value
. - person Compo   schedule 11.06.2020SET
. Он следует тем же правилам, которым вы научились в начальной школе, в том, что касается порядка операций. - person Squashman   schedule 12.06.2020