Как избежать запятой в WMIC внутри такой строки

Я хочу иметь возможность запускать запрос следующим образом:

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

Но это не работает из-за запятой внутри подобной строки. Ошибка, которую я получаю, - "Недопустимый глагол". Я попытался убежать от него с обратной косой чертой, и я попытался ускользнуть от него с помощью скобок, поскольку подчеркивания должны быть экранированы, и оба они привели к "Недопустимый глагол". ошибка.

В качестве обходного решения, отличного от идеала, я могу заменить запятые символами подчеркивания, и это работает, но подчеркивание будет соответствовать любому одиночному символу, а не только запятой, поэтому я бы скорее нашел способ избежать запятых.

Есть ли способ избежать запятой, как в этом примере?

Ответ 1

Один из способов найти запятую в предложении 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 способен на то, что вы хотите сделать.