【Windows系统】【小工具】----- 公司内,无管理员权限!一键自动清理内存脚本实现,防止经常死机重启

张开发
2026/4/3 15:24:35 15 分钟阅读
【Windows系统】【小工具】----- 公司内,无管理员权限!一键自动清理内存脚本实现,防止经常死机重启
前言作为开发人员经常电脑越来越慢经常卡机不得不经常重启但是耽误时间又没有最高权限安装清理内存工具不得不自己编写一个。它做了这几件事清理用户临时文件%TEMP% 目录清理 Chrome/Edge 浏览器缓存清理系统错误报告、缩略图缓存、最近文件记录刷新 DNS 缓存关闭已知的后台垃圾进程OneDrive、Teams、Cortana、各种更新程序等不会碰你的 IDEA、Java、浏览器、Docker、MySQL、Redis、Nacos 这些开发工具通过 PowerShell 优化占用超过 100MB 的非开发进程的内存工作集10分钟自动清理一次多余内存释放运行空间。界面源码脚本 clean-memory.bat 源码echo off setlocal EnableDelayedExpansion chcp65001nul21title 专业内存清理与提速工具[每10分钟自动清理]color0A setL01setL02 专业内存清理与提速工具 (无需管理员权限)setL03setL04 [软件说明]setL05 本工具定时清理系统临时文件, 浏览器缓存, 系统日志,setL06 DNS缓存, 后台冗余进程, 并优化进程内存工作集,setL07 释放被占用的资源, 提升系统运行流畅度.setL08 [保护规则]setL09 以下程序不会被关闭或优化:setL10 IDEA, VS Code, Java, Maven, Git, Chrome, Edge,setL11 Firefox, MySQL, Redis, Docker, Nacos, Gateway,setL12 Explorer, DWM 及所有系统核心进程.setL13 每10分钟自动清理一次, 按 CtrlC 随时退出.echo!L01!echo!L02!echo!L03!echo.echo!L04!echo.echo!L05!echo!L06!echo!L07!echo.echo!L08!echo.echo!L09!echo!L10!echo!L11!echo!L12!echo.echo!L13!echo!L01!echo.setROUND0:LOOP set/aROUND1echoecho 第!ROUND!轮清理 开始时间:%DATE%%TIME%echoecho.REM采集清理前系统状态setM01[采集] 清理前系统状态...echo!M01!for/f%%Min(powershell-NoProfile-Command(Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory)dosetFREE_KB_BEFORE%%Mfor/f%%Min(powershell-NoProfile-Command(Get-CimInstance Win32_OperatingSystem).TotalVisibleMemorySize)dosetTOTAL_KB%%Mfor/f%%Cin(powershell-NoProfile-Command(Get-CimInstance Win32_Processor).LoadPercentage)dosetCPU_BEFORE%%Cfor/f%%Pin(powershell-NoProfile-Command(Get-Process).Count)dosetPROC_BEFORE%%Pset/aTOTAL_MB!TOTAL_KB! / 1024set/aFREE_MB_BEFORE!FREE_KB_BEFORE! / 1024set/aUSED_MB_BEFORE!TOTAL_MB! - !FREE_MB_BEFORE!for/f%%Gin(powershell-NoProfile-Command[math]::Round(!TOTAL_MB!/1024,2))dosetTOTAL_GB%%Gfor/f%%Gin(powershell-NoProfile-Command[math]::Round(!FREE_MB_BEFORE!/1024,2))dosetFREE_GB_BEFORE%%Gfor/f%%Gin(powershell-NoProfile-Command[math]::Round(!USED_MB_BEFORE!/1024,2))dosetUSED_GB_BEFORE%%Gecho.setB_LINE 清理前: 内存 !USED_GB_BEFORE!/!TOTAL_GB! GB 可用 !FREE_GB_BEFORE! GB CPU !CPU_BEFORE!%% 进程 !PROC_BEFORE!echo!B_LINE!echo.for/f%%Tin(powershell-NoProfile-Command[int](Get-Date).TimeOfDay.TotalSeconds)dosetT_START%%TsetS1[1/6] 正在清理临时文件...echo!S1!del/q/f/s%TEMP%\*nul21del/q/f/s%LOCALAPPDATA%\Temp\*nul21setS2[2/6] 正在清理浏览器缓存...echo!S2!ifexist%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache(del/q/f/s%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache\*nul21)ifexist%LOCALAPPDATA%\Google\Chrome\User Data\Default\Code Cache(del/q/f/s%LOCALAPPDATA%\Google\Chrome\User Data\Default\Code Cache\*nul21)ifexist%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Cache(del/q/f/s%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Cache\*nul21)setS3[3/6] 正在清理系统缓存与日志...echo!S3!del/q/f%LOCALAPPDATA%\Microsoft\Windows\Explorer\thumbcache_*.dbnul21del/q/f%APPDATA%\Microsoft\Windows\Recent\*nul21del/q/f/s%LOCALAPPDATA%\Microsoft\Windows\WER\*nul21del/q/f/s%LOCALAPPDATA%\CrashDumps\*nul21setS4[4/6] 正在刷新 DNS 缓存...echo!S4!ipconfig/flushdnsnul21setS5[5/6] 正在关闭后台冗余进程...echo!S5!setKILL_COUNT0for%%Pin(YourPhone.exe PhoneExperienceHost.exe gamingservices.exe SkypeApp.exe SkypeBackgroundHost.exe HxTsr.exe HxOutlook.exe HxCalendarAppImm.exe MicrosoftEdgeUpdate.exe GoogleUpdate.exe OneDrive.exe FileSyncHelper.exe Teams.exe ms-teams.exe GrooveMonitor.exe Cortana.exe Video.UI.exe Music.UI.exe People.exe BingWallpaper.exe WallpaperEngine.exe AdobeARM.exe AdobeCollabSync.exe jusched.exe)do(tasklist/FIIMAGENAME eq %%P2nul|find/I%%Pnul21ifnoterrorlevel1(taskkill/F/IM%%Pnul21set/aKILL_COUNT1))setS5R 已关闭 !KILL_COUNT! 个冗余进程echo!S5R!setS6[6/6] 正在优化进程内存工作集...echo!S6!for/f%%Oin(powershell-NoProfile-Command$c0; Get-Process | Where-Object { $_.WorkingSet64 -gt 104857600 -and $_.ProcessName -notmatch (idea|idea64|java|javaw|node|Code|chrome|msedge|firefox|explorer|dwm|csrss|svchost|lsass|winlogon|mysql|mysqld|redis|docker|nacos|gateway|maven|git|powershell|pwsh|cmd|conhost|taskmgr|devenv|wt|System|Idle|smss|services|wininit|RuntimeBroker|MsMpEng) } | ForEach-Object { try { $_.MinWorkingSet New-Object IntPtr(1048576); $c } catch {} }; $c)dosetOPTIMIZED%%OsetS6R 已优化 !OPTIMIZED! 个进程echo!S6R!timeout/t3/nobreaknul echo.setM02[采集] 清理后系统状态...echo!M02!for/f%%Min(powershell-NoProfile-Command(Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory)dosetFREE_KB_AFTER%%Mfor/f%%Cin(powershell-NoProfile-Command(Get-CimInstance Win32_Processor).LoadPercentage)dosetCPU_AFTER%%Cfor/f%%Pin(powershell-NoProfile-Command(Get-Process).Count)dosetPROC_AFTER%%Pset/aFREE_MB_AFTER!FREE_KB_AFTER! / 1024set/aUSED_MB_AFTER!TOTAL_MB! - !FREE_MB_AFTER!for/f%%Gin(powershell-NoProfile-Command[math]::Round(!FREE_MB_AFTER!/1024,2))dosetFREE_GB_AFTER%%Gfor/f%%Gin(powershell-NoProfile-Command[math]::Round(!USED_MB_AFTER!/1024,2))dosetUSED_GB_AFTER%%Gset/aMEM_FREED!FREE_MB_AFTER! - !FREE_MB_BEFORE!set/aCPU_DIFF!CPU_BEFORE! - !CPU_AFTER!set/aPROC_DIFF!PROC_BEFORE! - !PROC_AFTER!for/f%%Gin(powershell-NoProfile-Command[math]::Round(!MEM_FREED!/1024,2))dosetMEM_FREED_GB%%Gfor/f%%Tin(powershell-NoProfile-Command[int](Get-Date).TimeOfDay.TotalSeconds)dosetT_END%%Tset/aELAPSED!T_END! - !T_START!if!ELAPSED!LSS0set/aELAPSED86400echo.setA_LINE 清理后: 内存 !USED_GB_AFTER!/!TOTAL_GB! GB 可用 !FREE_GB_AFTER! GB CPU !CPU_AFTER!%% 进程 !PROC_AFTER!echo!A_LINE!echo.echo--------------------------------------------------setR01 第 !ROUND! 轮清理报告 完成时间: %DATE% %TIME%echo!R01!echo--------------------------------------------------setR02 清理耗时: !ELAPSED! 秒setR03 释放内存: !MEM_FREED_GB! GBsetR04 CPU 变化: !CPU_BEFORE!%% --^ !CPU_AFTER!%% (降低 !CPU_DIFF!%%)setR05 关闭冗余: !KILL_COUNT! 个进程setR06 优化工作集: !OPTIMIZED! 个进程setR07 进程变化: !PROC_BEFORE! --^ !PROC_AFTER! (减少 !PROC_DIFF!)echo!R02!echo!R03!echo!R04!echo!R05!echo!R06!echo!R07!echo--------------------------------------------------if!MEM_FREED!GTR1024(setEVAL 评价: 效果显著, 释放超过 1 GB 内存)elseif!MEM_FREED!GTR512(setEVAL 评价: 效果良好, 系统运行更流畅)elseif!MEM_FREED!GTR0(setEVAL 评价: 小幅优化, 系统状态尚可)else(setEVAL 评价: 系统状态良好, 无需大量清理)echo!EVAL!echo--------------------------------------------------echo.setW01 下一轮清理将在 10 分钟后开始, 按 CtrlC 退出...echo!W01!echo.for/L%%iin(1,1,20)do(set/aREMAIN(20-%%i)*30set/aRMIN!REMAIN! / 60set/aRSEC!REMAIN! %% 60setWLINE 等待中... 距下次清理还有 !RMIN! 分 !RSEC! 秒echo!WLINE!timeout/t30/nobreaknul)gotoLOOP

更多文章