如何通过批处理脚本检查可用内存(RAM)?
Posted
技术标签:
【中文标题】如何通过批处理脚本检查可用内存(RAM)?【英文标题】:How to check available memory (RAM) via batch script? 【发布时间】:2012-07-05 18:57:57 【问题描述】:我想知道如何在批处理脚本中检查可用内存?有没有已经可用的方法?如果在批处理脚本中不可能,那么还有其他方法可以让我们获得可用内存吗?
操作系统:Windows XP / Windows 7
【问题讨论】:
根据您对术语“批处理脚本”的使用,我们是否应该假设您希望在 Windows 上执行此操作?有关您的上下文和环境的其他信息将有助于... 【参考方案1】:这应该可行:
free_mem=`free | sed -n 2p | awk 'print $4'`
这将为您提供空闲内存。如果您想要总数,请获取第一列 ($1)。
【讨论】:
哦,你说的是batch。我收回这个。【参考方案2】:不确定 Windows XP,但在 Windows 7 中,您可以使用 systeminfo
(外部)命令,如 this ServerFault question。除了在我的计算机上,该命令显示的信息太多,因此您可以将其限制在相关部分:
systeminfo | find "Physical Memory"
上面显示了以下信息:
总物理内存:n,nnn MB 可用物理内存:n,nnn MB如果您只需要 Available
行,请让您的搜索更具体:
systeminfo | find "Available Physical Memory"
【讨论】:
我很抱歉不接受这个答案,因为在不同的语言环境机器上(除了 EN)它会失败......那里有什么通用的方法吗? @Anand:可能不会。您需要将搜索词更改为用于该语言环境的systeminfo
输出中的搜索词。对不起。我认为,作为一个通用的单命令解决方案,@Alex K.'s 应该适合你(尽管@reuben's 似乎也可以)。【参考方案3】:
此站点有一个示例 VBScript,它检索 总 内存量:
http://www.computerperformance.co.uk/vbscript/wmi_memory.htm
它可以适应报告可用内存量:
' Memory.vbs
' Sample VBScript to discover how much RAM in computer
' Author Guy Thomas http://computerperformance.co.uk/
' Version 1.3 - August 2010
' -------------------------------------------------------'
Option Explicit
Dim objWMIService, perfData, entry
Dim strLogonUser, strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "impersonationLevel=impersonate!\\" _
& strComputer & "\root\cimv2")
Set perfData = objWMIService.ExecQuery _
("Select * from Win32_PerfFormattedData_PerfOS_Memory")
For Each entry in perfData
Wscript.Echo "Available memory bytes: " & entry.AvailableBytes
Next
WScript.Quit
您可以通过将其保存到扩展名为 .vbs
的文件(例如 memory.vbs
)并使用 cscript.exe 运行它来运行它,例如:
cscript.exe //nologo memory.vbs
...获得如下输出:
Available memory bytes: 4481511424
【讨论】:
非常感谢,这与语言环境无关 :) 这与语言环境无关,但我想它不适用于 64 位 Win 7 操作系统,对吧? 64 位操作系统的查询是什么? 在我的 Win7 x64 上运行良好,并且不依赖于语言环境 @reuben 可能是因为这个查询 (Select * from Win32_PerfFormattedData_PerfOS_Memory) 我解释它不起作用。正如我认为的 64 位机器,它将是 Win64_... 的东西。 @AlexK。太棒了!那么这就是我的解决方案......谢谢reuben【参考方案4】:替代方案:
C:\>wmic os get freephysicalmemory
FreePhysicalMemory
4946576
解析出一个变量(wmic 输出有一个标题+末尾的额外行)
for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do (
set m=%%p
goto :done
)
:done
echo free: %m%
free: 4948108
(freevirtualmemory
也可用)
【讨论】:
当我在德国机器上运行此命令 (wmic os get freephysicalmemory) 时,我收到以下错误:U:\>wmic os get freephysicalmemory MOF-Datei(en) konnte(n) nicht registriert werden . Nur Mitglieder der Administratorgruppe können WMIC.EXE verwenden。 Ursache:Win32-Fehler: Zugriff verweigert 基本上对于德国机器,我认为应该用德语调用“freephysicalmemory”。 这意味着 wmic 只能由具有本地管理员权限的用户运行【参考方案5】:这显示了用于批处理脚本和程序的可用内存:
>mem | find "total"
655360 bytes total conventional memory
1048576 bytes total contiguous extended memory
键入 MEM /?更多详情
编辑:回复新评论
>mem | find "avail"
655360 bytes available to MS-DOS
0 bytes available contiguous extended memory
941056 bytes available XMS memory
>mem
655360 bytes total conventional memory
655360 bytes available to MS-DOS
599312 largest executable program size
1048576 bytes total contiguous extended memory
0 bytes available contiguous extended memory
941056 bytes available XMS memory
MS-DOS resident in High Memory Area
【讨论】:
嘿,你为什么有599312 largest executable program size
?我只有598832
! :) 说真的,不过,我认为您可能应该将“for 批处理脚本和程序”行更改为“for 批处理脚本和 DOS 程序”(或者也许“...和一些遗留程序”)。
有些 Windows 7 机器有,有些没有这个命令。为什么会这样?
@RolandPihlakas:我不知道。您可以在网上搜索诸如this one、this one、this one 或...之类的答案。
@Aacini 所以答案可能是“仅在 32 位系统中可用”。【参考方案6】:
WMIC
在 Windows 的 Home/Basic/Starter 版本中不可用。SYSTEMINFO
太慢。
MSHTA
的替代方案应该适用于每个 Windows 系统:
for /f "usebackq" %%a in (`mshta ^"javascript^:close^(new ActiveXObject^(^'Scripting.FileSystemObject^'^).GetStandardStream^(1^).Write^(GetObject^(^'winmgmts:^'^).ExecQuery^(^'Select * from Win32_PerfFormattedData_PerfOS_Memory^'^).ItemIndex^(0^).AvailableBytes^)^);^"^|more`) do set free_mem=%%a
echo %free_mem%
还有另一种使用 dxdiag 的方法:
@echo off
taskkill /im dxdiag* /f
dxdiag /whql:off /t %cd%\dxdiag.txt
:ckeck_dx
tasklist | find "dxdiag" && ( w32tm /stripchart /computer:localhost /period:1 /dataonly /samples:5 >nul 2>&1 & goto :ckeck_dx )
find "Available OS Memory:" "dxdiag.txt"
del /q /f "%~dp0dxdiag.txt"
【讨论】:
【参考方案7】:我意识到这是一篇旧帖子,虽然当我使用“WMIC OS get FreePhysicalMemory”命令时,最后一个值是一个空行。所以,因为我知道第二行的值是我想要的,所以我只是使用 find 命令添加行号标志来获取第二行的值:
for /f "tokens=1,2 delims=]" %%p in ('WMIC OS get FreePhysicalMemory^|find /N /V ""') do (IF %%p equ [2 (set MEM=%%q))
echo.WMIC FreePhysicalMemory = %MEM%
【讨论】:
以上是关于如何通过批处理脚本检查可用内存(RAM)?的主要内容,如果未能解决你的问题,请参考以下文章