0

これが私が実行しようとしているコマンドです。SQL Server 2008 インスタンスのサービス名を取得したかった

FOR /F "delims==" %%G IN ('wmic service where (displayname like ^"%%sqlserver2008%%^")') DO echo %%G

4

1 に答える 1

2

最初に正しい WMIC コマンドを取得する必要があり、次にそれを FOR コマンド内で機能させる必要があります。

探している基本的な WMIC コマンドは次のとおりです。

wmic service where "displayName like '%%sqlserver2008%%'" get name

FOR /F にはいくつかの複雑な問題があります。WMIC 出力は Unicode であり、FOR /F との奇妙な相互作用があります。FOR /F が解析するすべての行には、最後に余分なキャリッジ リターンが含まれています。不要なキャリッジ リターンは、各 FOR /F 反復に含まれています。うん:(

効果的な解決策の 1 つは、目的の列以外に不要な列を少なくとも 1 つ追加して、CSV 形式を要求することです。その後、DELIMS と TOKENS を設定して、目的の列を取得できます。あなたの場合、州列は名前の後に表示されるため、適切な候補です。

WMIC /CSV 形式には、先頭に追加のノード列が含まれます。

WMIC /CSV 形式には、SKIP=2 を使用してスキップできる先頭の空白行とヘッダー行が含まれます。

これは、完全に機能する FOR /F ソリューションです。

for /f "skip=2 tokens=2 delims=," %%A in (
  'wmic service where "displayName like '%%sqlserver2008%%'" get name^,state /format:csv'
) do echo %%A
于 2013-01-10T03:04:55.517 に答える