我希望能够运行如下的查询:
wmic path Win32_Service where "DisplayName like 'FooBarService % (X, Y)'" get *
但是,由于类似字符串中的逗号,它不起作用。我得到的错误是“无效的动词”。我尝试使用反斜杠转义它,并尝试使用括号转义它,因为下划线意味着要转义,并且都导致“无效动词”。错误。
作为一种不太理想的解决方法,我可以用下划线替换逗号,并且它可以工作,但下划线将匹配任何单个字符而不仅仅是逗号,所以我宁愿找到一种方法来逃避逗号
有没有办法像本例中那样转义逗号?
答案 0 :(得分:1)
我发现在like
子句中包含逗号的一种方法是将整个where
表达式放在括号中。不幸的是,我还发现这意味着我不能同时在字符串中包含一个紧密的paren(但是开放的paren是可以的)。我尝试了/trace:on
选项,看看幕后发生了什么,它帮助我找到了程序接受的一些东西:
这是一个我用逗号工作的例子,但它显然不能包含一个关闭的paren:
C:\> wmic /trace:on path Win32_Service where (Description like '%(%, %') get DisplayName
这是一个例子,我开始使用开括号和近括号,但显然它不能包含逗号(显然,这与你原来的例子非常相似):
C:\> wmic /trace:on path Win32_Service where "Description like '%(TAPI)%'" get DisplayName
似乎解析器不够复杂,无法处理这些情况,但通过跟踪,您可以看到它使用的WMI Win32函数,因此您可以编写自己的程序直接使用这些函数。我认为IWbemServices::ExecQuery
能够满足您的目标。