如何将wmic路径查询结果转换成"Boolean",存入变量?

How do I a wmic path query result which is converted to a "Boolean", into a variable?

从另一篇Stack Overflow文章中,我找到了一段非常有用的代码。经过我的修改,它 returns "true" 或 "false" 如果插入了特定的 USB 设备。

是否可以将此 "true" 或 "false" 放入批处理变量中?

我想要运行一个批处理文件,如果插入 USB 设备,它会自动安装驱动程序

我已经用很多不同的配置尝试了 for /F 命令,但是

我总是得到错误:

2>&1 was unexpected at this time.

这是实际有效的查询:

wmic path Win32_PnPEntity where "Manufacturer like 'Lenovo' AND Caption like 'Thinkpad USB 3.0 Ethernet Adapter'" get Manufacturer 2>&1 > nul | find /V "" > nul && (echo False) || (echo True)

这只是我尝试过的 for /f 注释的一种变体...

for /f "tokens=2 delims=2>&1" %%a in ('wmic path Win32_PnPEntity where "Caption like 'Thinkpad USB LAN'" get Caption 2>&1 > nul | find /V "" > nul && (echo False) || (echo True)') do set TEST= %%a

>&) 等特殊字符在 FOR /FIN('cmd') 子句中使用时必须转义或引用.

重要的是要知道 IN 子句命令是通过 CMD /C 执行的,它具有帮助中描述的特殊引号处理行为。在您的情况下,最简单的选择是在单引号内添加封闭的双引号,如下所示:

for /f %%A in ('"wmic path Win32_PnPEntity where "Manufacturer like 'Lenovo' AND Caption like 'Thinkpad USB 3.0 Ethernet Adapter'" get Manufacturer 2>&1 > nul | find /V "" > nul && (echo False) || (echo True)"') do @echo %%A

隐式 CMD /C 将在安全解析 IN() 子句后删除最外面的引号。您的 WHERE 子句也被引用,因此在第一次解析过程中,它没有被引用。这没关系,因为您的 WHERE 子句没有任何特殊字符。如果是这样,那你就得逃到某个地方了。

  • 添加额外的引号,然后转义引用的 WHERE 子句中的任何特殊字符。
  • 或者使用不带额外引号的原始形式,并转义任何未被引号括起的特殊字符(所有不在您的情况下的 WHERE 子句中的字符)。