2014-10-24 6 views
8

Я хочу написать простой командный файл, чтобы убить процесс, содержащий определенный текст в заголовке окна. Сейчас у меня есть:Windows Batch file - taskkill, если заголовок окна содержит текст

taskkill /fi "Windowtitle eq XXXX*" /im cmd.exe 

И это работает, за исключением того, что я хочу сделать, это использовать подстановочные знаки как в начале и в конце названия. Так что-то вроде:

taskkill /fi "Windowtitle eq \*X*" /im cmd.exe 

Но я пробовал это, и он не работает. Есть что-то, чего я не вижу, или это невозможно?

ответ

5

Нет, в начале фильтра подстановочные знаки запрещены.

for /f "tokens=2 delims=," %%a in (' 
    tasklist /fi "imagename eq cmd.exe" /v /fo:csv /nh 
    ^| findstr /r /c:".*X[^,]*$" 
') do taskkill /pid %%a 

Это будет получить список задач, в формате CSV и расширенном формате (который будет включать в себя заголовок окна в качестве последнего поля на выходе).

Список фильтруется findstr с регулярным выражением, которое будет искать указанный текст (X) в последнем поле.

Если какая-либо строка соответствует фильтру, то for будет ее марксировать, извлекая второе поле (PID), которое будет использоваться в taskkill, чтобы завершить процесс.

+0

После поиска часов, это, безусловно, лучший способ там! Спасибо, MC ND! – Acidon

4

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

START MyWindowTitle c:/MyProcess.exe 

Таким образом, легко убить процесс снова, используя только

taskkill /fi "WindowTitle eq MyWindowTitle" 
+0

Ницца! это работает. Примечание: если ваш заголовок имеет «Администратор:» спереди, см. Этот ответ здесь: http://stackoverflow.com/questions/10948235/taskkill-window-spaces-in-its-title-name – Marc

+0

Идеальный и простой пример , благодаря –

 Смежные вопросы

  • Нет связанных вопросов^_^