【问题标题】:Wildcard in taskkill windowtitletaskkill 窗口标题中的通配符
【发布时间】:2019-02-11 16:50:03
【问题描述】:

当我想使用 taskkill 关闭以下两个(虚构的...)应用程序时...

...我会使用taskkill /FI "WINDOWTITLE eq Hello*"

但是这两个怎么样:

taskkill /FI "WINDOWTITLE eq * wine" 给我FEHLER: Der Suchfilter wurde nicht erkannt.,可以翻译为错误:无法识别搜索过滤器。

那么,如何在开头使用通配符进行过滤?

【问题讨论】:

  • 所以我看到你们两个例子之间的区别是空间。
  • 好点,我已经澄清了(那么,如何在开头使用通配符进行过滤?)。 :-)

标签: batch-file windows-7 taskkill


【解决方案1】:

开头的通配符不起作用。您需要主动加入findstr

for /f "tokens=2 delims=," %%a in ('tasklist /fi "imagename eq notepad.exe" /v /fo:csv /nh ^| findstr /r "wine"') do taskkill /pid %%a

所以我们搜索名称中带有wine 的图像名称。使用/fo转csv格式,/nh无标头,然后在imagename中搜索字符串“wine”,如果找到则按进程ID杀死。

不是特定于图像名称的:

for /f "tokens=2 delims=," %%a in ('tasklist /v /fo:csv /nh ^| findstr /r "wine"') do taskkill /pid %%a

编辑

关于杀死错误任务的担忧:

@echo off
set "images=notepad.exe,calc.exe,winword.exe,excel.exe"
for %%i in (%images%) do (
   for /f "tokens=2 delims=," %%a in ('tasklist /fi "imagename eq %%i" /v /fo:csv /nh ^| findstr /r "wine"') do taskkill /pid %%a
)

只需添加包含标题的可能图像名称列表,它只会按照下面的方式循环这些名称,而不涉及其他进程/任务:

tasklist /fi "imagename eq notepad.exe"
tasklist /fi "imagename eq calc.exe"
tasklist /fi "imagename eq winword.exe"
tasklist /fi "imagename eq excel.exe"

【讨论】:

  • 等等,您搜索的 imagenamenotepad.exe - 我没有明确说明(但使用记事本和计算器提示),但是 windows不必具有相同的图像名称/可执行文件。
  • @Bowi 您根本不必指定 /im,但它会运行稍长一些,因为它会找到每个任务。见编辑。
  • @Bowi,请注意,使用此解决方案,搜索不仅限于窗口标题,它将搜索tasklist 返回的所有字段,包括进程名称、会话名称、.. . 因此,例如,如果您的搜索词与进程名称匹配,您也会终止该进程,即使它具有不同的窗口标题。另一个危险的例子是,如果您将wine 替换为Console 甚至sol,则会话中具有窗口(@98​​7654334@)或所有进程(taskkill /f)的所有进程都可能/将被杀死。所以最好使用/IM 开关,以限制可能不需要的杀戮的范围。
  • @bowi,一种方法是列出文件或脚本本身中可能包含标题的所有可能的图像名称并循环遍历它,如果图像名称未列出,则不会被杀死.
  • 正确,因此我昨天提到删除 IM 会变得很慢,因为它会运行所有进程。享受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2012-02-16
  • 2013-03-21
  • 2012-10-29
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
相关资源
最近更新 更多