5

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

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

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

4

3 回答 3

14
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.

于 2012-03-15T18:35:36.583 回答
0

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

taskkill /FI "IMAGENAME eq your_image_name_here.exe"

==> taskkill 文档

于 2017-03-12T13:58:54.333 回答
0

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

SET name="process name you want to kill" && FOR /F "tokens=2,* delims=," %f IN ('TASKLIST /fo csv /v ^| FINDSTR /i /c:!name!') DO @TASKKILL /f /t /pid %f

于 2019-12-13T01:18:27.003 回答