获取WMIC命令的结果并将其存储在变量中

时间:2016-09-01 10:26:22

标签: batch-file scripting wmic

我已经看到一些批处理脚本以这种方式工作,包括所有的stackoverflow。

我的问题很简单:为什么MEM部分不起作用?

@echo OFF

SET CPU="$CPU"

echo CPU: %NUMBER_OF_PROCESSORS%

FOR /F "delims=" %%i IN ('wmic computersystem get TotalPhysicalMemory') DO set MEM=%%i

echo MEM: %MEM%

2 个答案:

答案 0 :(得分:5)

您可以执行类似的操作,将WMIC的输出格式化为For / Do,如下所示:

@echo off
Call :GetTotalPhysicalMemory
echo TotalPhysicalMemory = %MEM% & pause
exit
::***********************************************
:GetTotalPhysicalMemory
for /f "tokens=2 delims==" %%a in ('
    wmic computersystem get TotalPhysicalMemory /value
') do for /f "delims=" %%b in ("%%a") do (
    Set "MEM=%%b" 
)
exit /b
::***********************************************

答案 1 :(得分:1)

这很简单。 wmic computersystem get TotalPhysicalMemory输出三行文字:

TotalPhysicalMemory
12867309568
<blank line>

所以你的for循环进行三次迭代。在第一个MEM设置为TotalPhysicalMemory,在第二个设置为12867309568,最后它变为。所以你的输出是空的。

这很难看但会解决你的问题:

@echo OFF
setlocal enabledelayedexpansion
SET CPU="$CPU"
echo CPU: %NUMBER_OF_PROCESSORS%
FOR /F "delims= skip=1" %%i IN ('wmic computersystem get TotalPhysicalMemory') DO (
    set MEM=%%i
    goto STOP

)
:STOP
echo MEM: !MEM!

skip=1将忽略TotalPhysicalMemorygoto STOP将在第一次迭代后中断循环。