如何通过 IF 条件比较 WMIC 的 return 值?

How to compare the return value of WMIC by an IF condition?

这是控制台input/output:

C:\Users\>for /f "tokens=* skip=1" %a in ('wmic cpu get numberOfCores') do (set valor="%a")

" ) sers\> (set valor="4

" ) sers\> (set valor="

C:\Users\>set cpu=%valor:~6,-1%

C:\Users\>if "%cpu%" geq "4" (echo yes) else (echo no)
no

循环似乎迭代了两次,首先分配正确的值(4),然后将其覆盖为空白值,从而清除它,导致与4比较失败。

为什么会发生这种情况,我该如何解决才能使条件 returns yes?

您不需要return结果,将其保存为变量,然后进行比较。

您可以允许 WMI 查询语言确定该值是否为:

  • 等于4
wmic cpu where numberofcores^=4
wmic cpu where "numberofcores = 4"
  • 大于3
wmic cpu where numberofcores^>3
wmic cpu where "numberofcores > 3"

大于或等于 4

wmic cpu where numberofcores^>^=4
wmic cpu where "numberofcores >= 4"

将它们组合成更类似于您发布的意图的格式:

wmic cpu where numberofcores^>3 get numberofcores /value 2>nul|find "NumberOfCores">nul&&(echo yes)||echo no

或使用更多correct/robust,语法:

%SystemRoot%\System32\wbem\WMIC.exe CPU Where "NumberOfCores >= 4" Get NumberOfCores /Value 2>NUL | %SystemRoot%\System32\find.exe "NumberOfCores" 1>NUL && (Echo Yes) || Echo No