从其他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
答案 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子句没有任何特殊字符。如果这样做,那么您将不得不在某个地方进行转义。