Например: я запускаю 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