【问题标题】:How to get the RAM used by a batch file within the same batch file如何在同一个批处理文件中获取批处理文件使用的 RAM
【发布时间】:2017-07-03 21:25:16
【问题描述】:

我想创建一个批处理文件,在运行时在其窗口标题中显示它使用的内存(RAM)。我已经使用 wmic 命令尝试了以下代码,但它不起作用

:START
cls
set /A exe_count=%exe_count%+1
set /A mem_usage="wmic process where name='kill_tasks.bat' get WorkingSetSize | findstr /r "^[1-9][0-9]*"" 
title task kill -- execution count: %exe_count%, mem: %mem_usage%
<Other codes>
SLEEP 30
GOTO START

当执行 wmic 命令时,它会显示一条错误消息:

缺少运算符

窗口的标题是

task kill -- 执行次数:1,mem:0

如果我在批处理文件开始运行后在新的命令提示符窗口中单独运行 wmic 命令,则会显示错误:

没有可用的实例。

【问题讨论】:

  • 确定文件本身中的数据似乎是一个毫无意义的练习。一旦您开始检查它就会提高值,然后您的值将反映检查机制而不是批处理文件的实际过程。

标签: windows batch-file cmd


【解决方案1】:

作为 WMIC 如何无法为您提供准确数字的示例,或者可能是您可以信任的数字,请查看以下示例脚本:

@Echo Off
For /F "Delims=" %%A In ('
    "WMIC Process Where (Name='cmd.exe') Get CommandLine, WorkingSetSize|Find /I %0"
') Do For /F Tokens^=4Delims^=^" %%B In ("%%A") Do For %%C In (%%B) Do Echo( [%%C]
Timeout -1

您会注意到有两个输出,一个来自脚本的初始调用,另一个来自 WMIC 命令部分。我最初的想法是,第一个数字将是两者中较小的一个,因此是您需要的那个。不幸的是,虽然这个数字并不总是更小,因此可能不是您需要的。

还值得记住的是,find.exe 和 timeout.exe 等内置命令可能会在批处理文件外部注册不同的图形,因此不会包含在这些返回的图形中。

编辑

以下是忽略上述建议并将工作集大小保存到%WSS% 的版本。

@Echo Off
Set "WSS="
For /F "Delims=" %%A In ('
    "WMIC Process Where (Name='cmd.exe') Get CommandLine, WorkingSetSize|Find /I %0"
') Do For /F Tokens^=4Delims^=^" %%B In ("%%A") Do For %%C In (%%B
) Do If Not Defined WSS Set "WSS=%%C"
Echo( [%WSS%]
Timeout -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多