2017-06-21 20 views
1

我想獲取顯示名稱及其狀態的服務列表。收集每個服務的顯示名稱和狀態

這是我曾嘗試:

for /f "tokens=2" %s in ('SC query state^= all ^| find "DISPLAY_NAME"') do @(for /f "tokens=4" %t in ('SC query %s ^| find "STATE"') do @echo %s is %t) 

但這僅返回有限的服務,如磁盤等

+0

如果您使用的是批處理文件的代碼,你需要百分號 – npocmaka

+0

是啊,我已經用加倍%%在批處理文件... – Anonymous

回答

1

這是內置WMI命令行可執行文件WMIC.exe的完美任務。

從CMD.EXE提示:

For /F "Skip=1 Delims=" %A In ('"WMIC Service Get DisplayName, Name, State"') Do @For /F "Delims=" %B In ("%A") Do @Echo(%B 

從一個批處理文件:

@For /F "Skip=1 Delims=" %%A In ('"WMIC Service Get DisplayName, Name, State"' 
) Do @For /F "Delims=" %%B In ("%%A") Do @Echo(%%B 
@Pause 
+0

感謝Compo ..它像一個切片一樣......只需要在我的環境變量中添加wmic並完成......感謝Com .... – Anonymous

0

嘗試從PowerShell中獲取幫助,直接在批處理文件中,這樣,例如(保存爲.bat並運行它)。在這個例子中,我將它輸入到屏幕上,併爲您提供所有服務,僅運行和停止,但基本上可以對該txt文件的內容進行基本操作(使用循環搜索,將一部分保存到變量,等等。)。

@echo off&cls 

pushd %~dp0 

echo. 
echo List ALL services 
pause 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "powershell Get-Service | Out-File services.txt" 
type services.txt 
echo. 


echo List services that are RUNNING only 
pause 
find "Running" services.txt 


echo. 
echo List services that are STOPPED only 
pause 
find "Stopped" services.txt 
pause 


:cleanup 
del /f services.txt 
+0

謝謝你的回覆拉斐爾,但它不能識別PowerShell的某處我的錯誤,並在其他系統中工作順利!!!!! ...謝謝 – Anonymous

+0

上面的解決方案更好,因爲它不依賴於powershell :)很高興我能prov儘管如此,也是一種選擇 – Rakha