我需要编写一个批处理程序来结束所有带有窗口标题的 MS Office Communicator 任务(通常以模式“- 对话”结尾)。
我试过
taskkill /FI "WINDOWTITLE eq *对话" /IM communicator.exe
但以“*”开头的通配符模式似乎不起作用。给出以下错误
错误:无法识别搜索过滤器。
任何关于解决方法的建议都将不胜感激!
答案1
这是一个批处理文件,部分灵感来自这个问题作者: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
我发现我需要.
在正则表达式的末尾添加一个
echo
细绳| findstr /r
以 $ 结尾的正则表达式
表格才能正常工作。我猜这echo
是在细绳,并将其findstr
计为出现在字符串和行尾之间的字符。
taskkill
显然,您将在测试完该命令后取消注释该命令。
答案2
我非常欣赏使用 FOR 命令的批处理文件答案。
这是另一种方法,这里仅作为附加选项介绍。该方法与提供的其他答案截然不同。
首先,看看是否可以使用 WMIC 找到 MS Communicator 进程。例如:
WMIC 进程列表已满
或者,要在表格中水平显示信息而不是以 Property=Value 格式垂直显示,请执行以下操作:
WMIC 进程列表完整/格式:表格
或者,将其限制为:
WMIC 进程获取名称/格式:表
(忽略第一行)
这似乎没有显示窗口标题,但可能显示许多其他可用于唯一标识 Communicator 实例的信息,如可执行文件名称。
然后,您可以开始更加积极地缩小您的发现范围。以下查找以“name.exe”结尾的实例(例如“filename.exe”、“myname.exe”)
WMIC 进程,其中“描述类似于‘%%name.exe’”列表完整/格式:表
所有这些只是为了微调你的命令的研究。(毕竟,你真的不想开始终止错误的进程。)
最后,一旦完成了所有研究,您就知道可以列出您想要终止的东西,然后开始消灭。
WMIC 进程其中“描述类似‘%%name.exe’”删除
这种方法真正好的地方在于您可以快速找到收集大量可用于自动化的信息的方法。