如何将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 /F
的 IN('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 子句中的字符)。
从另一篇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 /F
的 IN('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 子句中的字符)。