我已经看到一些批处理脚本以这种方式工作,包括所有的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%
答案 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
将忽略TotalPhysicalMemory
,goto STOP
将在第一次迭代后中断循环。