在批处理文件中解析SC命令的输出

时间:2013-11-12 13:27:53

标签: batch-file

我正在努力解析SC.EXE命令的输出。我想列出名称中包含“text”的所有服务(活动或非活动)。

以下代码正在寻找事件日志:

FOR /F "usebackq" %%G IN (`"sc query state= all" ^| find "eventlog"`) DO echo [%%G]

如果不是您需要传递给SC命令的state= all参数,那么它将全部工作,这样您甚至可以获得不活动的服务。

对于一些不那么清楚的原因,SC命令中的参数值需要用空格分隔,这会造成很多混乱。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

for /f "tokens=2 delims=:" %%s in ('sc query state^= all ^| findstr /i /B /R "SERVICE_NAME:.*event" ') do echo %%s

使用冒号作为分隔符,并在行首处过滤SERVICE_NAME文本的行,然后过滤包含事件的任何文本,检索第二个标记(冒号后的服务名称)。

答案 1 :(得分:1)

FOR /F %%G IN ('sc query state^= all ^| find /i "eventlog"') DO echo [%%G]

似乎会找到eventlog,回显“[SERVICE_NAME:]

答案 2 :(得分:0)

要保留第二部分并假定冒号(假定SERVICE_NAME值中没有空格),请使用冒号。

sc query state= all | find "SERVICE_NAME" | find "SQL"

SERVICE_NAME: MSSQLFDLauncher
SERVICE_NAME: MSSQLSERVER
SERVICE_NAME: MSSQLServerOLAPService
SERVICE_NAME: SQLBrowser
SERVICE_NAME: SQLSERVERAGENT
SERVICE_NAME: SQLTELEMETRY
SERVICE_NAME: SQLWriter

使用标记2,这将占用上面的第二部分以及DO和该值的回显。在dos文件中,使用%% A。但是这里将使用%A。如果您有更多的令牌2,3,则可以使用%B。在for身体逃脱中,任何将由dos的初始输入解释的东西。

FOR /F "tokens=2 delims=: " %A IN ('sc query state^= all ^| find "SERVICE_NAME"') DO @echo [%A] | find "SQL"


[MSSQLFDLauncher]
[MSSQLSERVER]
[MSSQLServerOLAPService]
[SQLBrowser]
[SQLSERVERAGENT]
[SQLTELEMETRY]
[SQLWriter]
相关问题