3

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

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

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

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

有没有办法像这个例子中那样逃避逗号?

4

1 回答 1

2

我发现在like子句中包含逗号的一种方法是将整个where表达式放在括号中。不幸的是,我还发现这意味着我不能同时在字符串中包含一个封闭的括号(但是一个开放的括号是可以的)。我尝试了该/trace:on选项,以稍微了解一下幕后发生的事情,它帮助我找到了该程序接受的几件事:

这是我必须使用逗号的示例,但它显然不能包含右括号:

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有能力做你想做的事。

于 2013-08-01T19:54:41.430 回答