我想在不使用任何第三方工具的情况下获取所有service_name及其状态.到目前为止,SC命令足以获取其中一个值,例如
sc query | findstr SERVICE_NAME
Run Code Online (Sandbox Code Playgroud)
但我也需要列出STATUS每一个SERVICE_NAME.
这是一个应该完成工作的命令:
for /f "tokens=2" %s in ('sc query state^= all ^| find "SERVICE_NAME"') do
@(for /f "tokens=4" %t in ('sc query %s ^| find "STATE "') do @echo %s is %t)
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
首先sc query state= all | find "SERVICE_NAME"是运行.此命令旨在为您提供服务名称,每行一个.^为了逃避您想要影响sc命令的特殊字符而不是for命令本身,必须使用插入符号(我已在此处删除).
然后,初始化for /f解析上面的输出,从每行中删除标准的"SERVICE_NAME:"前缀,为您提供纯服务名称.此时输出如下所示:
C:\>for /f "tokens=2" %s in ('sc query state^= all ^| find "SERVICE_NAME"') do @echo %s
AdobeFlashPlayerUpdateSvc
AeLookupSvc
ALG
AppIDSvc
Appinfo
AppMgmt
aspnet_state
AudioEndpointBuilder
AudioSrv
Run Code Online (Sandbox Code Playgroud)
然后将该输出馈送到下一个for /f运行sc query servicename,运行,找到具有状态的行,并隔离第四个"字"(当前状态).
最后,每个服务的名称与其状态一起打印(此时,如果您愿意,您可以选择执行不同的操作).
重要说明:如果在批处理文件中运行,则百分号(例如at %s)需要加倍.
| 归档时间: |
|
| 查看次数: |
26696 次 |
| 最近记录: |