我正在尝试使Windows进程符合某些特定条件,例如他们就像“123456.exe”,并试图用任务列表将其杀死。我正在尝试这样做:

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

这是不正确的,我也不知道为什么。...有人可以给我提示吗?
提前感谢!

最佳答案

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输出的前两行。由于正则表达式与任务列表输出的前两行中的任何内容都不匹配,因此可以安全地删除跳过选项。

  • 顺便说一句,如果您将此命令放在批处理脚本中,请记住使用“%% i”代替“%i”作为参数,否则您将收到一条类似于i was unexpected at this time.的错误消息
  • FOR /F documentation
  • Findstr documentation
  • 10-08 16:26