Windows 从tasklist传递PID并使用tasklist终止进程

Windows 从tasklist传递PID并使用tasklist终止进程,windows,batch-file,tasklist,taskkill,Windows,Batch File,Tasklist,Taskkill,我试图让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 /

我试图让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
一些变化:

  • 命令\u-to\u进程需要在命令的两侧加上反引号(``)
  • 命令_to _进程内的管道(“|”)需要用插入符号(“^”)转义
  • findstr命令将匹配在“.exe”前面有一个数字的所有进程。例如,“myapp4.exe”也会被杀死。我提供的版本将匹配仅包含数字的进程名称
  • “skip=2”选项将跳过findstr的前两行输出,而不是tasklist。由于正则表达式与tasklist输出的前两行中的任何内容都不匹配,因此可以安全地删除skip选项
顺便说一句,如果您将此命令放在批处理脚本中,请记住对参数使用“%%i”而不是“%i”,否则您将收到一条错误消息,如
i此时出乎意料。


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

taskkill /FI "IMAGENAME eq your_image_name_here.exe"

==>

我在命令行中使用了这个: 名称变量可以包含带“的空白环绕”

SET name=“要终止的进程名”&&FOR/F“令牌=2,*delims=,“%F IN('TASKLIST/fo csv/v^ | FINDSTR/i/c:!name!”)DO@TASKKILL/F/t/pid%F


如果我只想杀死列表中的第一个pid,上面的命令会有什么变化?例如,如果我打开了2个notepad.exe,我只想杀死列表中的第一个pid。没关系,我找到了秘密。setlocal enabledelayedexpansion set flag=0表示/F“usebackq tokens=2”%%I in(
tasklist^ findstr/r/b)notepad.exe“
)DO(if!flag!==0(echo!flag!taskkill/pid%%i set flag=1 echo!flag!)endlocal