Проблема с синтаксисом Windows TASKKILL

После всех этих лет можно подумать, что я сделал несколько пакетных файлов Windows какого-то типа. Но вы ошибаетесь. Я обновляю пакетный файл и столкнулся со следующим утверждением:

TASKKILL /F /FI "WINDOWTITLE eq SIM RH*" /IM perl.exe

Почему и /FI, и /IM? Два предложения вместе? Если я оставлю /IM, правильные процессы будут уничтожены.

Это имеет смысл только в том случае, если они заканчиваются и убивают только задачи с таким заголовком окна И являются задачами perl.exe.


person D. Scruggs    schedule 06.12.2016    source источник
comment
/FI - это фильтр в соответствии с taskkill /?, поэтому предполагалось, что он убьет только окно perl.exe с заголовком SIM RH, я думаю...   -  person geisterfurz007    schedule 06.12.2016


Ответы (2)


Да добавляются!

/IM будет убивать все задачи с разными идентификаторами процессов
/FI применяет к этому фильтр. Вы можете проверить это примерно так:

@echo off
for /L %%i in (1,1,5) do start "%%i" cmd.exe
timeout /t 3
taskkill /F /FI "WindowName ne 3" /IM cmd.exe

Это должно оставить вас с 1 командной строкой с заголовком 3. Все остальные будут закрыты.

Изменение ne на eq приведет только к закрытию командной строки с заголовком 3, оставив вас с 1, 2, 4, 5 и yourBatch.bat

person geisterfurz007    schedule 06.12.2016

Да. Данная опция /FI "WINDOWTITLE eq SIM RH*" будет фильтровать процессы по заголовку окна, начинающемуся с SIM RH. ссылка на taskkill указывает, что если задан такой фильтр, подстановочный знак * принимается для опции /IM.

О чем не говорится, так это о том, что добавление фильтра и удаление /IM, похоже, подразумевает /IM *.

Вы можете проверить это поведение с помощью следующей команды, которая откроет обычную оболочку и powershell в двух отдельных окнах, а затем уничтожит оба окна, просто указав фильтр заголовка окна.

start "testp1" cmd && start "testp2" powershell && taskkill /F /FI "WINDOWTITLE eq testp*" 
person zb226    schedule 06.12.2016