共计 2136 个字符,预计需要花费 6 分钟才能阅读完成。
背景
手头的一些 Windows 机器,在长时间开启后由于运行了大量进程,导致响应缓慢。
由于进程太多,一个个清理太费时间,以往都是重启了事。但是重启后尽管部分应用配置了开机自启,但是仍有应用需要手动进行配置,也费事。
在逛论坛时,发现了一个脚本,可以用于解决我的问题。这里感谢 愚无尽 的无私奉献。
52破解 一键结束非白名单进程v1.0让系统满血复活 by愚无尽
脚本修改
在实际使用中,发现几点问题:
- 白名单列表的进程,若存在多个相同进程名,只会保留第一个匹配到的进程,剩余的仍会被kill。例如
Clash for Windows.exe
会同时启动5个同名进程,执行原脚本后会kill 4个,留存1个 - 在执行 kill 前,无法预测会kill 哪些进程。
于是进行脚本修改:
- 先初始化被 kill 的进程列表,遍历当前启动进程和白名单进程,将被 kill 的进程存入列表。原始逻辑是一边遍历一边kill。
- 输出列表供用户进行二次确认
- 执行 kill
@echo off
title 一键结束非白名单进程v1.1
setlocal enableextensions enabledelayedexpansion
echo __ __ _ ____ ____
echo / //_/(_) / / / __ \_________ ________ __________
echo / ,^< / / / / / /_/ / ___/ __ \/ ___/ _ \/ ___/ ___/
echo / /^| ^|/ / / / / ____/ / / /_/ / /__/ __(__ ^|__ )
echo /_/ ^|_/_/_/_/ /_/ /_/ \____/\___/\___/____/____/
echo.
echo ╭───────────────╮
echo ╭───────┤一 键 结 束 非 白 名 单 进 程├───────╮
echo │ ╰───────────────╯ │
echo │ ※ 一键结束非白名单进程释放系统性能 │
echo │ │
echo │ ※ 一键结束病毒木马进程还我系统主权 │
echo │ │
echo │ ※ 已内置系统白名单,可在whitelist后添加自己白名单 │
echo │ │
echo │ ※ 操作本工具存在风险可能,执行表示已知悉存在的风险 │
echo │ │
echo │ │
echo ╰───────────────────────────────╯
echo 请保存好相关工作,清楚风险按任意键继续,否则请直接关闭!!!
echo ────────────────────────────────
echo.
echo ^>^>^> 按任意键继续. . .
echo.
pause>nul 2>&1
:: 设置白名单变量
:: set "whitelist=audiodg.exe;ApplicationFrameHost.exe;csrss.exe;ctfmon.exe;ChsIME.exe;cmd.exe;conhost.exe;dwm.exe;dllhost.exe;explorer.exe;fontdrvhost.exe;lsass.exe;lsm.exe;RuntimeBroker.exe;smss.exe;services.exe;svchost.exe;system;sihost.exe;spoolsv.exe;ShellExperienceHost.exe;userinit.exe;wininit.exe;winlogon.exe;WMIADAP.exe;WmiPrvSE.exe;WUDFHost.exe"
echo 检索将被终止的进程列表...
:: 初始化进程列表
set "processList="
:: 收集所有进程名称
for /f "tokens=1* delims=," %%a in ('tasklist /nh /fo csv ^| findstr /v /c:"System Idle Process"') do (
set "proc=%%a"
set "proc=!proc:"=!" :: 去除引号
set "processList=!processList!!proc!;"
)
:: 检查进程是否在白名单中并移除
for %%w in (!whitelist!) do (
set "processList=!processList:%%w=!"
)
:: 输出剩余的进程信息
echo =========================
echo 非白名单进程列表(进程名)
echo =========================
for %%x in (!processList!) do (
if not "%%x"=="" echo %%x
)
echo.
echo 等待 2 秒进行确认...
timeout /t 2 > nul
echo 等待完成
:: 等待用户确认
echo.
echo 按任意键继续终止上述进程...
pause>nul 2>&1
:: 终止剩余的进程
for %%x in (!processList!) do (
if not "%%x"=="" (
for /f "tokens=2 delims=," %%p in ('tasklist /fi "IMAGENAME eq %%x" /fo csv /nh') do (
taskkill /f /pid %%p >nul 2>&1
echo 已终止 %%x
)
)
)
echo.
echo 所有非白名单进程已被终止,按任意键退出...
pause>nul 2>&1
endlocal
效果如下:
本文属于专题:Windows
引用链接
正文完