我想知道我们如何检查批处理脚本中的可用内存?有没有已经可用的方法?如果在批处理脚本中不可能,那么还有其他方法可以让我们获得可用的内存吗?
操作系统:Windows XP / Windows 7
我想知道我们如何检查批处理脚本中的可用内存?有没有已经可用的方法?如果在批处理脚本中不可能,那么还有其他方法可以让我们获得可用的内存吗?
操作系统:Windows XP / Windows 7
选择:
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
也可用)
该站点有一个示例 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
不确定 Windows XP,但在 Windows 7 中,您可以使用systeminfo
(外部)命令,根据这个 ServerFault question。除了在我的计算机上,该命令显示的信息太多,因此您可以将其限制在相关部分:
systeminfo | find "Physical Memory"
上面显示了以下信息:
总物理内存: n,nnn MB 可用物理内存:n,nnn MB
如果您只想要这Available
条线,请让您的搜索更具体:
systeminfo | find "Available Physical Memory"
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"
这显示了批处理脚本和程序的可用内存:
>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
这应该有效:
free_mem=`free | sed -n 2p | awk '{print $4}'`
这将为您提供空闲内存。如果您想要总数,请获取第一列 ($1)。
我意识到这是一篇旧帖子,尽管当我使用“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%