
Por ejemplo: corrotaskmgr.exey se cierra. ¿Cómo hago eso conlote?
Respuesta1
La única forma que se me ocurre de hacer esto a través de secuencias de comandos por lotes sería dejar un .bat ejecutándose en segundo plano, en bucle constante y verificando si se está ejecutando un nombre de imagen de proceso de aplicación específico.
Pero a) No veo por qué querrías finalizar automáticamente un proceso en lugar de detener su ejecución en primer lugar.
b) No veo por qué querrías hacer esto con un script por lotes. Los scripts por lotes no responderán a los eventos de Windows automáticamente; lo único que se puede hacer es crear un bucle que se ejecute infinitamente y verifique si algo se está ejecutando.
c) Hacer cosas en lotes es como construir un castillo de naipes con un martillo y me encanta, así que aquí tienes una respuesta de todos modos, viejo:
@ECHO OFF
:loop
set "app=TASKMGR.exe"
::Set Output of tasklist command to variable %TL%
FOR /F "tokens=* USEBACKQ" %%A IN (`TASKLIST /FI "IMAGENAME EQ %app%"`) DO (SET "TL=%%A")
::check for "info:no( tasks are running which...)"
::any other output, task exists, so kill it
IF "%TL:~0,8%" NEQ "INFO: No" (TASKKILL /FI "IMAGENAME EQ %app%")
::beware of velociraptors
goto :loop
Personalmente, prefiero este guión.
@ECHO OFF
MODE CON: COLS=80 LINES=2
set "A=*** "
:loop
set "app=TASKMGR.exe"
FOR /F "tokens=* USEBACKQ" %%A IN (`TASKLIST /FI "IMAGENAME EQ %app%"`) DO (SET "TL=%%A")
IF "%TL:~0,8%" NEQ "INFO: No" (TASKKILL /FI "IMAGENAME EQ %app%")
SET "A= %A:~0,15%"
echo (@)@):::::::D%a:~1,15%%APP%
if "%A%" equ " ***" set "A=*** "
goto :loop