我无法在批处理文件中使用正确的语法来使用WMIC

时间:2013-01-10 00:56:20

标签: batch-file dos wmic

这是我正在尝试运行的命令。我想获取SQL Server 2008实例的服务名称

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

1 个答案:

答案 0 :(得分: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