2012-08-29 4 views

Odpowiedz

6

Oto polecenia, które należy wykonać zadanie:

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) 

Jak to działa:

Pierwszy sc query state= all | find "SERVICE_NAME" jest prowadzony. To polecenie ma na celu podanie nazw usług, po jednym w wierszu. Opieki ^ (które usunąłem tutaj) są konieczne, aby uniknąć znaków specjalnych, które mają wpłynąć na polecenie sc, a nie na samo polecenie for.

Następnie pierwsze for /f analizuje powyższe dane wyjściowe, aby usunąć standardowy prefiks "SERVICE_NAME:" z każdej linii, podając czyste nazwy usług. W tym momencie wyjście wygląda następująco:

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 

To wyjście jest następnie podawany do następnego for /f, czyli sc query servicename, znajdzie linię ze stanem i izoluje 4th „słowo” (obecny stan).

Na koniec, drukowana jest nazwa każdej usługi wraz z jej stanem (w tym momencie możesz wybrać inną opcję, jeśli chcesz).

Ważna uwaga: W przypadku uruchomienia tego wewnątrz pliku wsadowego, znaki procent (na przykład w %s) muszą zostać podwojona.

+0

Dziękuję bardzo miłe wyjaśnienie – abi1964

1

ss64.com/nt/sc.html

sc state= active¦inactive¦all 
Powiązane problemy