从任务列表传递 PID 并使用任务列表终止进程

从任务列表传递 PID 并使用任务列表终止进程

这与我的主题相关将 tasklist 中的 PID 传递到 taskkill 中,以通过其保持打开的 .dll 来终止进程

我正在尝试做一些类似于该帖子中讨论的事情:

FOR /F "usebackq tokens=2 skip=2" %i IN (`tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i

上述命令无法运行。我想获取所有类似的进程123456.exe并终止它们。我做错了什么?

答案1

您需要进行一些更改才能使其正常工作。此示例如您所愿:

FOR /F "usebackq tokens=1-2" %i IN (`tasklist ^|findstr /b "[0-9]"`) DO taskkill /PID %j

您的代码:

FOR /F "usebackq tokens=2 skip=2" %i IN (`tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i

您的代码失败的原因:

  • 在运行时,skip=2 指令将跳过前两个结果。
  • Tasklist.exe 输出有几列。Findstr.exe 作用于第一列,但 Taskkill.exe 使用第二列。如果不同时包括这两列,Taskkill.exe 就没有 pid 可以作用。
  • 您的集合(括号之间的字符串)必须使用反引号(usebackq 指令)来描述。您的集合缺少最后一个反引号。
  • | 或“管道”字符是保留字符。您必须使用 ^ 字符对其进行转义。
  • 您传递给 Findstr.exe 的正则表达式集返回了非预期结果。我通过删除 .exe 并指示 Findstr.exe 在管道流的开头查找我的字符串解决了这个问题。受此限制,我的结果不包括您的集合中包含的 rundll32.exe 等程序。

您可以在 Rob Vanderwoude 和 Timo Salmi 的网站上找到一些出色的脚本示例:

相关内容