2008-11-19 27 views
8

Me gustaría escribir un archivo de proceso por lotes que verifique si se está ejecutando un proceso, y toma una acción si es así, y otra acción si no es así.Dentro de un archivo por lotes, ¿cómo puedo saber si se está ejecutando un proceso?

Sé que puedo usar la lista de tareas para enumerar todos los procesos en ejecución, pero ¿hay alguna manera más sencilla de verificar directamente un proceso específico?

Parece que esto debería funcionar, pero no es así:

tasklist /fi "imagename eq firefox.exe" /hn | MyTask 
IF %MyTask%=="" GOTO DO_NOTHING 
'do something here 
:DO_NOTHING 

Utilizando la solución aportada por atzz, aquí es una demostración de trabajo completo:

Editar: simplificado, y modificado para funcionar tanto bajo WinXP y Vista

echo off 

set process_1="firefox.exe" 
set process_2="iexplore.exe" 
set ignore_result=INFO: 

for /f "usebackq" %%A in (`tasklist /nh /fi "imagename eq %process_1%"`) do if not %%A==%ignore_result% Exit 
for /f "usebackq" %%B in (`tasklist /nh /fi "imagename eq %process_2%"`) do if not %%B==%ignore_result% Exit 

start "C:\Program Files\Internet Explorer\iexplore.exe" www.google.com 

Respuesta

6

Puede usar la construcción "for/f" para analizar la salida del programa.

set running=0 
for /f "usebackq" %%T in (`tasklist /nh /fi "imagename eq firefox.exe"`) do set running=1 

Además, es una buena idea para pegar una

setlocal EnableExtensions 

en el begginning de su script, por si acaso, si el usuario ha deshabilitado por defecto.

+0

Agradable ... hay tantas gemas escondidas en cmd.exe. – Kev

Cuestiones relacionadas