batch-file - WMIC 命令未显示正确的值?
问题描述
我们使用一种产品向我们的平台报告 RAM 和 CPU 等审计信息。
但是,当涉及到 RAM 时,我们得到了不同寻常的结果。
产品使用命令:wmic computersystem get totalphysicalmemory
输出值为 2.3GB RAM
但是它安装了4GB。我们使用这些信息为我们的客户创建路线图,因此需要准确。知道为什么吗?
解决方案
wmic memorychip get capacity
使用 Hybrid [batch-Vbscript] 文件,您可以执行以下操作:
@echo off
Mode 55,10 & color 0A
Title TotalPhysicalMemory ^& Memorychip Capacity
Set "WMIC_TOTMEM=wmic ComputerSystem get TotalPhysicalMemory /format:Value"
Set "WMIC_Capacity=wmic memorychip get capacity /format:Value"
Set "CAP=Capacity"
Set "TOT=TotalPhysicalMemory"
Call :GetTOTMEM %TOT% TotalPhysicalMemory
Call :GetCapacityMem %CAP% Capacity
echo(
Call :Convert %TotalPhysicalMemory% TotalPhysicalMemory_Converted
Call :Convert %Capacity% Capacity_Converted
echo -------------------------------------------------
echo TotalPhysicalMemory = %TotalPhysicalMemory%
echo Memorychip Capacity = %Capacity%
echo -------------------Converted---------------------
echo TotalPhysicalMemory = %TotalPhysicalMemory_Converted%
echo Memorychip Capacity = %Capacity_Converted%
echo -------------------------------------------------
pause>nul & Exit
::-------------------------------------------------------
:GetCapacityMem
FOR /F "tokens=2 delims==" %%I IN (
'%WMIC_Capacity% ^| find /I "%~1" 2^>^nul'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
::-------------------------------------------------------
:GetTOTMEM
FOR /F "tokens=2 delims==" %%I IN (
'%WMIC_TOTMEM% ^| find /I "%~1" 2^>^nul'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
::-------------------------------------------------------
:Convert
Set "VBS=%Temp%\%Random%.vbs"
(
echo wscript.echo Convert("%~1"^)
echo 'Function to format a number into typical size scales
echo Function Convert(iSize^)
echo aLabel = Array("bytes", "KB", "MB", "GB", "TB"^)
echo For i = 0 to 4
echo If iSize ^> 1024 Then
echo iSize = iSize / 1024
echo Else
echo Exit For
echo End If
echo Next
echo Convert = Round(iSize,2^) ^& " " ^& aLabel(i^)
echo End Function
)>"%VBS%"
for /f "delims=" %%a in ('Cscript //NoLogo "%VBS%"') do ( set "%2=%%a" )
Del "%VBS%"
Exit /b
::-------------------------------------------------------