¿Cómo evitar que una aplicación se ejecute por lotes?

¿Cómo evitar que una aplicación se ejecute por lotes?

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

información relacionada