如何在字符串中转义WMIC中的逗号

时间:2013-07-23 21:44:02

标签: wmi

我希望能够运行如下的查询:

wmic path Win32_Service where "DisplayName like 'FooBarService % (X, Y)'" get *

但是,由于类似字符串中的逗号,它不起作用。我得到的错误是“无效的动词”。我尝试使用反斜杠转义它,并尝试使用括号转义它,因为下划线意味着要转义,并且都导致“无效动词”。错误。

作为一种不太理想的解决方法,我可以用下划线替换逗号,并且它可以工作,但下划线将匹配任何单个字符而不仅仅是逗号,所以我宁愿找到一种方法来逃避逗号

有没有办法像本例中那样转义逗号?

1 个答案:

答案 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能够满足您的目标。