如何通过批处理脚本检查可用内存(RAM)?

Ana*_*and 3 windows-xp batch-file windows-7

我想知道我们如何检查批处理脚本中的可用内存?有没有可用的方法?如果在批处理脚本中不可能,那么我们可以通过其他任何方式获取内存吗?

操作系统:Windows XP/Windows 7

Ale*_* K. 12

替代方案:

C:\>wmic os get freephysicalmemory
FreePhysicalMemory
4946576
Run Code Online (Sandbox Code Playgroud)

解析变量(wmic输出有一个标题+末尾的额外行)

for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do ( 
  set m=%%p
  goto :done
)
:done
echo free: %m%
Run Code Online (Sandbox Code Playgroud)
free: 4948108
Run Code Online (Sandbox Code Playgroud)

(freevirtualmemory也可用)

  • 这意味着wmic只能由具有本地管理员权限的用户运行 (4认同)

reu*_*ben 7

该站点有一个示例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
Run Code Online (Sandbox Code Playgroud)

您可以通过将其保存到带扩展名的文件.vbs(例如memory.vbs)并使用cscript.exe运行它来运行它,例如:

cscript.exe //nologo memory.vbs
Run Code Online (Sandbox Code Playgroud)

...获得如下输出:

Available memory bytes: 4481511424
Run Code Online (Sandbox Code Playgroud)


And*_*y M 6

不确定Windows XP,但在Windows 7中,您可以使用systeminfo(外部)命令,根据此ServerFault问题.除了在我的计算机上该命令显示太多信息,所以这里是如何将它限制在相关部分:

systeminfo | find "Physical Memory"
Run Code Online (Sandbox Code Playgroud)

以上显示以下信息:

Total Physical Memory:     n,nnn MB
Available Physical Memory: n,nnn MB

如果您只想要该Available行,请使您的搜索更具体:

systeminfo | find "Available Physical Memory"
Run Code Online (Sandbox Code Playgroud)


npo*_*aka 5

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%
Run Code Online (Sandbox Code Playgroud)

而对于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"
Run Code Online (Sandbox Code Playgroud)