无法在批处理脚本中获得算术计算答案

问题描述 投票:0回答:1

我正在尝试获取特定过程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%

我是批处理脚本的新手。我想念什么吗?

for-loop batch-file command-prompt arithmetic-expressions mathematical-expressions
1个回答
0
投票

根据我在评论中提供的建议,并使用另一种确定与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%

如果我没记错的话,在任何会话中第一次使用此方法都会有一个延迟,在那之后,您通常会注意到速度显着提高。


如果您已经知道进程的名称,通常是不带扩展名的可执行文件的名称,则可以使用它代替PID,(将[​​C0]行的ExecutableFile字符串更改为您的进程名称根据需要)
2
© www.soinside.com 2019 - 2024. All rights reserved.