Например: я запускаю taskmgr.exe и он закрывается. Как мне сделать это с партией?
1 ответ
Единственный способ сделать это с помощью пакетного скриптинга - это оставить .bat работающим в фоновом режиме, постоянно зацикливаясь и проверяя, работает ли конкретное имя образа процесса приложения.
Но а) я не понимаю, почему вы хотели бы автоматически убивать процесс, а не останавливать его запуск
б) Я не понимаю, почему вы хотите сделать это с помощью пакетного сценария. Пакетные сценарии не будут автоматически реагировать на события Windows, и единственное, что нужно сделать, - это собрать вместе бесконечно работающий цикл, который проверяет, работает ли что-то.
в) Делать вещи в пакетном режиме - это все равно что строить карточный домик с молотком, и мне это нравится, так что в любом случае, вот вам, старик, ответ:
@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
Лично я предпочитаю этот сценарий
@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
