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

时间:2012-03-15 00:31:41

标签: windows batch-file tasklist taskkill

我正在尝试让Windows进程符合某些特定条件,例如:它们就像“123456.exe”并试图用tasklist杀死它们。我试图这样做:

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

这是不对的,我不知道为什么....谁能给我一个提示? Thanx提前!

3 个答案:

答案 0 :(得分:11)

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

一些变化:

  • command_to_process需要命令两边的引号(``)。
  • command_to_process内部的管道(“|”)需要使用插入符号(“^”)进行转义。
  • 您的findstr命令将匹配“.exe”之前具有数字的所有进程。例如,“myapp4.exe”也将被杀死。我提供的版本将匹配仅包含数字的进程名称。
  • “skip = 2”选项会跳过findstr输出的前两行,而不是tasklist。由于正则表达式与tasklist输出的前两行中的任何内容都不匹配,因此您可以安全地删除skip选项。

顺便说一句,如果您将此命令放在批处理脚本中,请记住使用“%% i”而不是“%i”作为参数,否则您将收到类似i was unexpected at this time. <的错误消息/ p>

答案 1 :(得分:1)

如果进程名称差异不是很复杂,例如如果名称始终相同 你可以直接使用taskkill的/ FI选项

taskkill /FI "IMAGENAME eq your_image_name_here.exe"

==&GT; taskkill documentation

答案 2 :(得分:0)

我在命令行中使用了它: 名称变量可以包含带有“

  

SET name =“您想要杀死的进程名称” && FOR / F“ tokens = 2,* delims =,”%f IN('任务列表/ fo csv / v ^ | FINDSTR / i / c:!name! ')做@TASKKILL / f / t / pid%f