Windows TASKKILL 语法问题

Windows TASKKILL syntax issue

这么多年过去了,您可能会认为我已经完成了一些 Windows 某种类型的批处理文件。但你错了。我正在更新批处理文件并遇到以下语句:

TASKKILL /F /FI "WINDOWTITLE eq SIM RH*" /IM perl.exe

为什么同时使用 /FI 和 /IM?这两个子句是连在一起的吗?如果我离开 /IM,正确的进程就会被杀死。

唯一有意义的方法是,如果它们结束并仅终止具有 window 标题的任务并且是 perl.exe 任务。

是的,它们已添加!

/IM 将杀死 所有 具有不同 process-IDs
的任务 /FI 对其应用过滤器。你可以用这样的东西来测试它:

@echo off
for /L %%i in (1,1,5) do start "%%i" cmd.exe
timeout /t 3
taskkill /F /FI "WindowName ne 3" /IM cmd.exe

这应该会给您留下 1 个 command-prompt,标题为 3。所有其他的都将关闭。

ne 更改为 eq 只会关闭标题为 3 的 command-prompt,留下 1, 2, 4, 5yourBatch.bat

是的。给定的 /FI "WINDOWTITLE eq SIM RH*" 选项将按 window 以 SIM RH 开头的标题过滤进程。 reference for taskkill 指定如果给出这样的过滤器,则 /IM 选项接受通配符 *

没有说的是添加过滤器并省略 /IM 似乎暗示 /IM *.

您可以使用以下命令验证此行为,这将在两个单独的 windows 中打开一个常规 shell 和一个电源 shell,然后将两者都杀死 windows只需指定 window 标题过滤器即可。

start "testp1" cmd && start "testp2" powershell && taskkill /F /FI "WINDOWTITLE eq testp*"