获取 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
::***********************************************
我见过一些批处理脚本以这种方式工作,包括所有围绕 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
::***********************************************