windows - plano - Dentro de un archivo por lotes, ¿cómo puedo saber si se está ejecutando un proceso?
manejo de variables en batch (2)
Me gustaría escribir un archivo por lotes que compruebe si se está ejecutando un proceso, y toma una acción si es así, y otra acción si no es así.
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:
tasklist /fi "imagename eq firefox.exe" /hn | MyTask
IF %MyTask%=="" GOTO DO_NOTHING
''do something here
:DO_NOTHING
Usando la solución provista por atzz, aquí hay una demostración completa y funcional:
Editar: simplificado y modificado para funcionar tanto en WinXP como en 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
Algunas opciones:
- PsList de Microsoft
http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/win2kcommands_0401.html#ps
- Cygwin (para ps)
- el kit de recursos (para ps.vbs)
http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/win2kcommands_0401.html#ps
- Powershell para obtener un proceso.
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 poner un
setlocal EnableExtensions
al comienzo de su script, por si acaso si el usuario lo tiene deshabilitado de forma predeterminada.