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

Get the result of a WMIC command and store it in a variable

我见过一些批处理脚本以这种方式工作,包括所有围绕 Whosebug 的脚本。

我的问题很简单:为什么 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%

很简单。 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 将忽略 TotalPhysicalMemory 并且 goto STOP 将在第一次迭代后中断循环。

你可以用 For / Do 循环格式化 WMIC 的输出来做类似的事情:

@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
::***********************************************