如何通过 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
这是控制台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