
Например: Я бегу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