it-swarm-ja.com

taskkill-特定の文字列で終わるウィンドウタイトルでタスクを終了します

すべてのMSOfficeコミュニケータータスクをウィンドウタイトルで終了するバッチプログラムを作成する必要があります(通常はパターン「-会話」で終了します)。

私は試した

taskkill/FI "WINDOWTITLE eq *会話"/IM communicator.exe

ただし、「*」で始まるワイルドカードパターンは機能していないようです。次のエラーが発生します

エラー:検索フィルターを認識できません。

回避策の提案をいただければ幸いです。

5
dbza

これは、Rogierによる この質問 に部分的に触発されたバッチファイルです。

_@echo off_

for /F "delims=" %%a in ('tasklist /fo list /v') do (
_      call :Sub %%a_
_)_
_exit /b_

_:Sub_
_set Line=%*_
_set BOL4=%Line:~0,4%_
_set BOL13=%Line:~0,13%_
_set Value=%Line:~14%_
_if "%BOL4%"=="PID:" (_
_      set save_PID=%Value%_
_      exit /b_
_)_
_if "%BOL13%"=="Window Title:" (_ //未満。
_      echo %Value% | findstr /r /c:"- Conversation.$" > nul_
_      if not errorlevel 1 (_
_            echo %save_PID%_
_            REM taskkill /pid %save_PID%_
_      )_
_      exit /b_
_)_
_exit /b_

の正規表現の最後に_._を追加する必要があることがわかりました。

echostring_| findstr /r_$で終わる正規表現

動作するフォーム。 echoがCRまたはおそらく余分なCRLFをstringに追加していて、findstrがそれを文字として数えていると思います文字列と行末の間に発生します。

明らかに、これをテストしたtaskkillコマンドのコメントを外します。

2
Scott

FORコマンドを使用したバッチファイルの回答に感謝します。

これは別の方法であり、ここでは単に追加オプションとして示しています。アプローチは、提供されている他の回答とはかなり異なります。

まず、WMICを使用してMSCommunicatorプロセスを見つけることができるかどうかを確認します。例えば。:

WMICプロセスリストがいっぱい

または、Property = Value形式ではなく、テーブルに水平方向に情報を表示するには、次のようにします。

WMICプロセスリストフル/ FORMAT:TABLE

または、おそらく、それを制限するために:

WMICプロセスは名前/ FORMAT:TABLEを取得します

(そして最初の行を無視します)

これはウィンドウタイトルを表示していないようですが、実行可能ファイル名など、Communicatorインスタンスを一意に識別するために使用できる他の多くの情報が表示される場合があります。

次に、より積極的になり始め、調査結果を絞り込みます。以下は、「name.exe」で終わるインスタンスを探します(例:「filename.exe」、「myname.exe」)

WMIC PROCESS WHERE "Description like '%% name.exe'" LIST FULL/FORMAT:TABLE

それはすべて、コマンドを微調整するための調査でした。 (結局のところ、間違ったプロセスの終了を開始したくはありません。)

最後に、すべての調査が完了したら、終了したいものだけをリストして、殺し始めることができることがわかります。

WMIC PROCESS WHERE "'%% name.exe'のような説明" DELETE

この方法の本当に素晴らしい部分は、自動化に使用できる多くの情報を収集できる方法をすばやく見つけることです。

3
TOOGAM