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

这与我的线程相关将任务列表中的PID传递给taskkill,通过打开的.dll杀死一个进程 。

我正在尝试做一些在线程中讨论过的内容:

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

上述命令不运行。 我想要得到像123456.exe所有的进程,并杀死他们。 我究竟做错了什么?

您需要进行一些更改才能使其正常工作。 这个例子如你所愿:

 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作用。
  • 您的设置(括号中的string)必须使用反引号(usebackq指令)进行描述。 你的设置缺less最后的报价。
  • |或'pipe道'字符是保留的。 你必须用^字符来逃避它。
  • 您传递给Findstr.exe的正则expression式集合返回给我意想不到的结果。 我通过去除.exe文件并指示Findstr.exe在pipe道stream开始处查找我的string来解决此问题。 有限的这种方式,我的结果不包括像你的设置包括rundll32.exe程序。

您可以在Rob Vanderwoude和Timo Salmi的网站上find一些优秀的脚本示例: