真正在WMI
语法中苦苦挣扎的任何帮助将不胜感激
我有2个reg键,我想运行WMI
查询以确定我的PC是笔记本电脑还是台式机。然后,我想基于结果导入reg键。如果是台式机,则导入desktop.reg
;如果是笔记本电脑,则导入laptop.reg
。
我一直使用的WMI
查询是:
wmic path Win32_PhysicalMemory get FormFactor
和12 = SODIMM
的内存输出,因此是一台笔记本电脑。如何实现以下目标?
IF "formfactor"="12" ( do this ) else ( do that )
指向正确的方向非常感激!
答案 0 :(得分:3)
尽管for /f
循环(如aschipfl所示)是将命令输出到变量的正确方法,但实际上并不需要它:
wmic path Win32_PhysicalMemory get FormFactor|find "12" >nul && goto :Laptop || goto :desktop
goto :eof
:desktop
echo This is a desktop
goto :eof
:laptop
echo this is a laptop
goto :eof
答案 1 :(得分:2)
使用for /F
loop循环捕获wmic
命令行的输出:
for /F "skip=1" %%E in ('
wmic path Win32_PhysicalMemory get FormFactor
') do for /F %%F in ("%%E") do set "FF=%%F"
if %FF% equ 12 (
echo FormFactor is 12.
) else (
echo FormFactor is not 12.
)
此示例中的第二个for /F
循环可防止伪像(如孤立的回车符)通过`for / F将wmic
的Unicode输出转换为ANSI。
如果有多个内存模块,则for /F
循环将在所有模块上进行迭代,因此临时变量FF
实际上包含最后迭代的模块的形状因数。
如果要在命令提示符窗口而不是批处理文件中执行代码,请注意必须将%%E
和%%F
替换为%E
和{{1} }。
您可以让wmic
command使用%F
子句进行过滤:
where
然后使用find
command检查是否有匹配的项目,如下所示:
wmic path Win32_PhysicalMemory where FormFactor=12 get FormFactor
2> nul wmic path Win32_PhysicalMemory where FormFactor=12 get FormFactor /VALUE | > nul find "=" && (
echo FormFactor is 12.
) || (
echo FormFactor is not 12.
)
开关将/VALUE
的输出更改为类似wmic
的输出;然后使用FormFactor=12
查找包含find
的返回行。由于没有=
的所述过滤,如果没有这样的预期形状因数,则根本没有匹配输出。 &&
and ||
operators是条件运算符,它们对返回的where
退出代码作出反应。
无论如何,确定内存模块的外形尺寸可能不是找出您的计算机是否是便携式计算机的最可靠方法。因此,正如您在comment中所提到的,Win32_ComputerSystem
类是更合适的类:
find