2012-08-29 9 views

Respuesta

6

Aquí hay un comando que debe hacer el trabajo:

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ómo funciona:

Primera sc query state= all | find "SERVICE_NAME" se ejecuta. Este comando está diseñado para darle los nombres de los servicios, uno por línea. Las referencias ^ (que he eliminado aquí) son necesarias para escapar de los caracteres especiales que desea afectar al comando sc y no al comando for.

Luego, el for /f inicial analiza el resultado anterior para eliminar el prefijo "SERVICE_NAME:" estándar de cada línea, lo que le da nombres de servicio puros. En este punto, la salida es el siguiente:

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 

Esta salida se alimenta entonces a la siguiente for /f, que se extiende sc query servicename, encuentra la línea con el estado, y aísla la "palabra" cuarto (el estado actual).

Finalmente, el nombre de cada servicio se imprime junto con su estado (en este punto puede elegir hacer algo diferente si lo desea).

Nota importante: Si ejecuta esto dentro de un archivo por lotes, los signos de porcentaje (por ejemplo, %s) deben duplicarse.

+0

Gracias muy buena explicación también – abi1964

1

ss64.com/nt/sc.html

sc state= active¦inactive¦all 
Cuestiones relacionadas