【问题标题】:Windows + wmic + memoryWindows + wmic + 内存
【发布时间】:2012-04-29 03:29:08
【问题描述】:

我想在一个批处理脚本中汇总所有名为“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 中工作,最好与我的命令非常相似。

谢谢

【问题讨论】:

    标签: windows memory cmd wmic


    【解决方案1】:

    您的 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 位)。

    【讨论】:

    • +1:叹息!我希望人们真的会像你最后给出的那样接受好的建议......
    • WorkingSetSize 始终是 1024 字节 (= 1 KiB) 的倍数。为避免 2 GiB 溢出,您可以计算 KiB 中的总和:“set /a SUM+=%i / 1024”。另请注意,总结 PageFileUsage(已经在 KiB 中)可能更相关,因为这不会多次计算共享内存页面。
    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    相关资源
    最近更新 更多