2

我想在批处理脚本中汇总所有名为“test.exe”的程序的已用内存。我可以使用以下命令来获取所有相应进程的内存使用情况:

C:\> wmic process where name="test.exe" get workingsetsize | findstr /v "WorkingSetSize"
55758848
66174976

所以,我想我想将所有这些值与 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.

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

谢谢

4

1 回答 1

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

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

于 2012-04-17T21:18:40.793 回答