Windows + wmic +内存

ele*_*nor 2 memory windows cmd wmic

我想在批处理脚本中总结所有名为"test.exe"的程序的已用内存.我可以使用以下命令来获取所有适当进程的内存使用情况:

C:\> wmic process where name="test.exe" get workingsetsize | findstr /v "WorkingSetSize"
55758848
66174976
Run Code Online (Sandbox Code Playgroud)

所以,我想我想将所有这些值与FOR循环相加.以下命令只显示i变量,但是我得到了附加的错误.

C:\> for /F %i IN ('wmic process where name="test.exe" get workingsetsize ^| findstr /v "WorkingSetSize"') DO echo %i
 test.exe - Invalid alias verb.
Run Code Online (Sandbox Code Playgroud)

如何更改该命令以将所有已用内存加在一起并输出,并且它必须在CMD中工作,最好与我的命令非常相似.

谢谢

dbe*_*ham 7

您的FOR语句失败,因为它=是一个标记分隔符,它被批处理解析器剥离.如果你逃避它,它将工作^=.

WMIC有一个令人遗憾的"特性",无论何时输出管道输出,它在每行输出的末尾都包含一个额外的回车符(0x0D),以及输出末尾的额外行.这可能会导致FOR循环中出现额外不需要的行问题.通过更改FINDSTR以查找至少一位数而不是没有标题行,可以轻松解决您的情况.

要获得总和,只需在循环中使用SET/A(在首次初始化SUM变量之后).

>set SUM=0
>for /F %i IN ('wmic process where name^="test.exe" get workingsetsize ^| findstr "[0-9]"') DO set /a SUM+=%i
Run Code Online (Sandbox Code Playgroud)

但是 - Windows CMD中的数学仅限于32位有符号整数支持.您的金额很可能超过允许的最大值2,147,483,647.最好使用PowerShell,或者CSCRIPT来执行VBS或JScript程序.所有这些替代方案都支持长整数(64位).