2012-08-29 22 views

Trả lời

6

Dưới đây là một lệnh cần thực hiện công việc:

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) 

Cách hoạt động:

Đầu tiên sc query state= all | find "SERVICE_NAME" được chạy. Lệnh này được thiết kế để cung cấp cho bạn tên dịch vụ, mỗi tên một dòng. Các số điện thoại ^ (mà tôi đã xóa ở đây) là cần thiết để thoát khỏi các ký tự đặc biệt mà bạn muốn ảnh hưởng đến lệnh sc và không phải là lệnh for.

Sau đó, for /f phân tích cú pháp đầu ra ở trên để phân tích tiền tố "SERVICE_NAME:" chuẩn từ mỗi dòng, cung cấp cho bạn tên dịch vụ thuần túy. Tại thời điểm này đầu ra trông như thế này:

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 

sản lượng này sau đó được đưa tới tiếp theo for /f, chạy sc query servicename, tìm phù hợp với nhà nước, và phân lập lần thứ 4 "từ" (hiện trạng).

Cuối cùng, tên của từng dịch vụ được in cùng với trạng thái của dịch vụ (tại thời điểm này, bạn có thể chọn làm điều gì đó khác nếu bạn muốn).

Lưu ý quan trọng: Nếu bạn chạy tệp này bên trong tệp lô, thì các dấu phần trăm (ví dụ: %s) cần phải được tăng gấp đôi.

+0

Cảm ơn lời giải thích rất hay – abi1964

1

ss64.com/nt/sc.html

sc state= active¦inactive¦all 
Các vấn đề liên quan