我正在尝试获取特定过程PID的内存使用百分比,但是仅打印值,而不是计算输出值。
@echo off
setlocal enableextensions EnableDelayedExpansion
set PID=5716
for /f "tokens=5 delims= " %%F in ('tasklist /nh /FI "PID eq !PID!"') do (
for /f "tokens=2 delims==" %%a in ('wmic computersystem get TotalPhysicalMemory /value') do (
set "MEM=((%%F*100) /%%a)"
)
)
)
echo PercentageMemory = %MEM%
我是批处理脚本的新手。我想念什么吗?
根据我在评论中提供的建议,并使用另一种确定与PID关联的过程的方法,您可以这样做,(在5716
行上更改PID,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
但是请注意,如果算术遇到的数字超过了32位有符号整数的Set /A
限制,则该方法将失败。另外,您应该注意,因为我们正在使用整数,所以结果将始终四舍五入到最接近的整数。这表示1%
以下的任何内容将显示为0%
如果我没记错的话,在任何会话中第一次使用此方法都会有一个延迟,在那之后,您通常会注意到速度显着提高。
ExecutableFile
字符串更改为您的进程名称根据需要):2