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

3
我希望能够运行下面这样的查询: wmic path Win32_Service where "DisplayName like 'FooBarService % (X, Y)'" get * 但由于like字符串中含有逗号,所以无法正常工作。我收到的错误是“Invalid Verb”。我尝试使用反斜杠进行转义,也尝试使用括号进行转义,因为下划线是需要转义的,但两者都导致了“Invalid Verb”错误。
作为不太理想的解决方法,我可以将逗号替换为下划线,这样就能正常工作了,但下划线将匹配任何单个字符而不仅仅是逗号,所以我更愿意找到一种转义逗号的方法。
是否有像这个例子中一样转义逗号的方法?
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 能够实现您要做的事情。

我刚刚验证了IWbemServices :: ExecQuery确实能够同时处理逗号和括号。我有机会时会为您发布一些示例代码。 - Joe Bane
它防止我在查询中包含一个右括号,但它确实解决了逗号问题。 - MikeW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接