題 taskkill - 結束以特定字符串結尾的窗口標題的任務


我需要編寫一個批處理程序來結束所有帶有窗口標題的MS office通信任務(通常以模式“ - Conversation”結尾)。

我試過了

taskkill / FI“WINDOWTITLE eq * Conversation”/ IM communicator.exe

但是以'*'開頭的通配符模式似乎不起作用。給出了以下錯誤

錯誤:無法識別搜索過濾器。

任何建議的解決方法將不勝感激!


5
2017-12-10 17:03


起源


'*'無法在過濾文本的開頭工作 - Ofiris


答案:


這是一個部分受到啟發的批處理文件 這個問題 羅吉爾:

@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

我發現我需要添加一個 . 在正則表達式的末尾

echo| findstr /r正則表達式以$結尾

形式工作。我猜是的 echo 正在添加CR或者額外的CRLF , 然後 findstr 將其計為字符串和行尾之間的字符。

顯然你會取消評論 taskkill 命令你測試過這個。


2
2017-12-11 00:46





我很欣賞使用FOR命令的批處理文件答案。

這是另一種方法,在此僅作為附加選項提供。該方法與提供的其他答案完全不同。

首先,看看您是否可以使用WMIC找到MS Communicator進程。例如。:

完整的WMIC流程列表

或者,要在表格中水平顯示信息而不是在Property = Value格式中垂直顯示信息,請執行以下操作:

WMIC流程列表完整/格式:表

或者,為了限制它:

WMIC流程獲取名稱/格式:表

(並忽略第一行)

這似乎沒有顯示Window標題,但可能顯示許多其他信息可用於唯一標識Communicator實例,如可執行文件名稱。

然後,您可以開始變得更積極,縮小您的發現範圍。以下查找以“name.exe”結尾的實例(例如,“filename.exe”,“myname.exe”)

WMIC PROCESS WHERE“描述''%% name.exe'”LIST FULL / FORMAT:TABLE

所有這些只是為了微調你的命令而進行的研究。 (畢竟,你真的不想開始終止錯誤的進程。)

最後,一旦你的所有研究完成,你知道你可以列出你想要終止的東西,然後開始殺戮。

WMIC PROCESS WHERE“描述'%% name.exe'”DELETE

關於此方法的一個非常好的部分是您可以快速找到能夠收集大量可用於自動化的信息的方法。


3
2018-01-06 10:10



這對我有用。 - John Livermore