我想获取所有的service_name和它的状态,而不使用任何第三方工具。 到目前为止, SC命令足以取得其中的一个值
sc query | findstr SERVICE_NAME
但是我也需要列出每个SERVICE_NAME
STATUS
。
这是一个应该完成这个工作的命令:
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)
怎么运行的:
首先sc query state= all | find "SERVICE_NAME"
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
然后这个输出被送到下一个for /f
,它运行sc query servicename
,找到该行的状态,隔离第4个“word”(当前状态)。
最后,每个服务的名称会随着其状态一起打印(此时,如果您愿意,您可以选择做一些不同的事情)。
重要说明:如果你在一个批处理文件中运行这个,百分号(如%s
)需要加倍。
ss64.com/nt/sc.html
sc state= active¦inactive¦all