web-dev-qa-db-ja.com

Windowsバッチファイル-ウィンドウタイトルにテキストが含まれている場合はtaskkill

ウィンドウタイトルに特定のテキストを含むプロセスを強制終了する簡単なバッチファイルを作成したいと思います。今私は持っています:

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

そして、それは機能しますが、私がやりたいのは、タイトルの最初と最後の両方でワイルドカードを使用することです。だから次のようなもの:

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

しかし、私はこれを試しましたが、機能しません。私が見逃しているものはありますか、それともこれは不可能ですか?

12
uesports135

いいえ、フィルターの開始時にワイルドカードを使用することはできません。

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はそれをトークン化し、プロセスを終了するためにtaskkillで使用される2番目のフィールド(PID)を取得します。

10
MC ND

バッチファイルからコマンドウィンドウを自分で開始した特別な場合は、コマンドを使用してウィンドウタイトルを指定できます。

START MyWindowTitle c:/MyProcess.exe 

そうすれば、プロセスを再度強制終了するのは簡単です。

taskkill /fi "WindowTitle eq MyWindowTitle"
7
Godsmith