【问题标题】:Pass PIDs from tasklist and kill processes with tasklist从任务列表传递 PID 并使用任务列表终止进程
【发布时间】:2012-03-31 12:40:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows batch-file tasklist taskkill


    【解决方案1】:

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

    的空白包围

    SET name="你要杀死的进程名" && FOR /F "tokens=2,* delims=," %f IN ('TASKLIST /fo csv /v ^| FINDSTR /i /c:!name! ') 做@TASKKILL /f /t /pid %f

    【讨论】:

      【解决方案2】:

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

      taskkill /FI "IMAGENAME eq your_image_name_here.exe"
      

      ==> taskkill documentation

      【讨论】:

        【解决方案3】:
        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.的错误消息

        【讨论】:

        • 如果我只想杀死列表中的第一个 pid,上面的命令会有什么变化?即如果我打开了 2 个 notepad.exe,我只想杀死列表中的第一个 pid。
        • 没关系,我找到了秘诀。 setlocal enabledelayedexpansion set flag=0 FOR /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 !标志!) ) endlocal
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-28
        • 2015-04-01
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多