基于WMI查询结果的if语句

时间:2018-11-26 14:46:07

标签: batch-file wmi

真正在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 ) 

指向正确的方向非常感激!

2 个答案:

答案 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