我如何将Wmic路径查询结果转换为“布尔值”并转换为变量?

时间:2019-08-14 10:07:58

标签: windows batch-file wmic

从其他Stack Overflow文章中,我发现了一段非常有用的代码。经过我的修改,如果插入了特定的USB设备,它将返回“ true”或“ false”。

是否可以将“ true”或“ false”转换为批处理变量?

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

我已经尝试了具有许多不同配置的for / F命令,但

我总是会收到错误:

  

2>&1这一次出乎意料。

以下是实际有效的查询:

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)

这只是我尝试的/ 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

1 个答案:

答案 0 :(得分:2)

>的{​​{1}}子句中使用时,必须转义或引用特殊字符,例如&)IN('cmd')等。 / p>

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

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将除去最外面的引号。您的WHERE子句也被引用,因此在第一次解析过程中,它没有被引用。可以,因为您的WHERE子句没有任何特殊字符。如果这样做,那么您将不得不在某个地方进行转义。

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