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 迭代中。呸:(

一种有效的解决方案是请求 CSV 格式,在您感兴趣的列之外至少有一个额外的不需要的列。然后您可以设置 DELIMS 和 TOKENS 以获得所需的列。在您的情况下,State 列出现在 Name 之后,因此它是一个不错的候选者。

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 回答