2013-07-23 47 views
3

我希望能夠運行像下面這樣的查詢:如何逃避逗號WMIC裏面像串

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

但是,它並沒有因爲類似的字符串中的逗號的工作。我得到的錯誤是「無效的動詞」。我嘗試用反斜槓轉義它,並且我嘗試使用括號轉義它,因爲下劃線意味着要被轉義,並且都導致「Invalid Verb」。錯誤。

作爲一種不太理想的解決方法,我可以用下劃線代替逗號,它可以工作,但下劃線會匹配任何單個字符而不是逗號,所以我寧願找到一種方法來逃避逗號。

有沒有辦法像這個例子中的逗號轉義?

回答

1

我發現在like子句中包含逗號的一種方法是將整個where表達式置於括號中。不幸的是,我也發現這意味着我不能在同一時間在字符串中包含一個近親(但是一個開放的paren可以)。我試用了/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能夠達到你想要做的。

+0

我剛剛證實'IWbemServices :: ExecQuery'確實能夠處理逗號和parens在一起。當我有機會時,我會爲您發佈一些示例代碼。 –

+0

它阻止我在查詢中包含一個關閉的paren,但它確實可以解決逗號問題。 – MikeW