2012-08-29 24 views

回答

6

這裏有一個命令應該做的工作:

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命令而不是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,找到與狀態的線,和隔離第四「字」(當前狀態)。

最後,打印每個服務的名稱及其狀態(此時可以選擇按照您的意願做不同的事情)。

重要注意事項:如果在批處理文件中運行此項,百分號(例如%s)需要加倍。

+0

謝謝非常好的解釋 – abi1964

1

ss64.com/nt/sc.html

sc state= active¦inactive¦all 
相關問題