使用 taskkill 按用户名杀死所有进程但排除一些进程

使用 taskkill 按用户名杀死所有进程但排除一些进程

我想使用 taskkill 按用户名终止所有进程,使用以下命令:

taskkill /f /fi "USERNAME eq %username%"

问题是我想排除(跳过)一些进程(而不是全部杀死它们),例如 explorer.exe、taskmgr.exe、cmd.exe,当然还有当前的 CMD 实例

我如何使用 taskkill 排除这个进程?

谢谢

答案1

Windows 本机批处理脚本 CMD 方法

下面是使用批处理脚本的解决方案任务列表为/F循环设置并相应地解析变量,以仅获取特定用户正在运行的进程的进程名称。

查找字符串然后进一步解析这些结果以排除您在Exclusions顶部变量中设置的任何指定的排除。

它将获取最终剩余的结果并终止该特定用户名的进程名称,并通过批处理脚本为您提供所需的结果,正如所解释的那样。

批处理脚本

要使此操作生效,只需设置两个变量,即 和UsernameExclusions其余变量将正常工作并按您的需要执行其余过程。只需指定完整的进程名称,并用空格将它们一一分开,就像下面的脚本一样。

@ECHO ON
SET Username=user
SET Exclusions=explorer.exe taskmgr.exe cmd.exe 

SET tmpfl=%temp%\%~n0tmp.dat
IF EXIST "%tmpfl%" DEL /F /Q "%tmpfl%"
SET Exclusions=%Exclusions% taskkill.exe 

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=: TOKENS=2" %%A IN ('TASKLIST /FI "USERNAME EQ %Username%" /FO LIST ^| FIND /I "Image name:"') DO (
    SET var=%%~A
    SET var=!var: =!
    ECHO !var! | FINDSTR /I /V "%Exclusions%">>"%tmpfl%"
)
FOR /F "USEBACKQ TOKENS=*" %%A IN ("%tmpfl%") DO (
    TASKKILL /F /FI "USERNAME eq %Username%" /IM %%~A
)
GOTO :EOF

批处理脚本 2

@ECHO ON
CD /D "%~DP0"
SET Exclusions=cmd.exe explorer.exe taskmgr.exe 

SET tmpfl=%~n0tmp.dat
IF EXIST "%tmpfl%" DEL /F /Q "%tmpfl%"
SET Exclusions=%Exclusions% taskkill.exe 

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=: TOKENS=2" %%A IN ('TASKLIST /FI "USERNAME EQ %Username%" /FO LIST ^| FIND /I "Image name:"') DO (
    SET var=%%~A
    SET var=!var: =!
    ECHO !var! | FINDSTR /I /V "%Exclusions%">>"%tmpfl%"
)
FOR /F "USEBACKQ TOKENS=*" %%A IN ("%tmpfl%") DO (
    TASKKILL /F /FI "USERNAME eq %Username%" /IM %%~A
)
DEL /F /Q "%tmpfl%"
GOTO :EOF

更多资源

答案2

我个人会使用 powershell 来执行此操作。

像这样:

$processes = Get-Process -IncludeUserName | where {$_.UserName -like "*USERNAME*"}
$tobeignored = @("explorer","Taskmgr","cmd")
foreach($process in $processes)
{
    if($tobeignored.Contains($process.ProcessName))
    {
        continue;
    }
    else
    {
        Stop-Process $process.Id -Force
    }
}

我还没有测试运行这个,我有点不想杀死我自己的进程:) 如果它不工作请告诉我

答案3

您可以通过为 指定多个过滤器来实现此目的taskkill。例如,如果您想排除 explorer.exe,请为图像名称添加一个过滤器不是等于 explorer.exe (带有ne运算符):

taskkill /f /fi "USERNAME eq %username%" /fi "IMAGENAME ne explorer.exe"

相关内容