【Windows系统】【小工具】----- 公司内,无管理员权限!一键自动清理内存脚本实现,防止经常死机重启
前言
作为开发人员,经常电脑越来越慢,经常卡机,不得不经常重启,但是耽误时间,又没有最高权限安装清理内存工具,不得不自己编写一个。
它做了这几件事:
清理用户临时文件(%TEMP% 目录)
清理 Chrome/Edge 浏览器缓存
清理系统错误报告、缩略图缓存、最近文件记录
刷新 DNS 缓存
关闭已知的后台垃圾进程(OneDrive、Teams、Cortana、各种更新程序等),不会碰你的 IDEA、Java、浏览器、Docker、MySQL、Redis、Nacos 这些开发工具
通过 PowerShell 优化占用超过 100MB 的非开发进程的内存工作集
10分钟自动清理一次多余内存,释放运行空间。
界面:
源码
脚本 clean-memory.bat 源码
@echo off setlocal EnableDelayedExpansion chcp65001>nul2>&1title 专业内存清理与提速工具[每10分钟自动清理]color0A set"L01==================================================="set"L02= 专业内存清理与提速工具 (无需管理员权限)"set"L03==================================================="set"L04= [软件说明]"set"L05= 本工具定时清理系统临时文件, 浏览器缓存, 系统日志,"set"L06= DNS缓存, 后台冗余进程, 并优化进程内存工作集,"set"L07= 释放被占用的资源, 提升系统运行流畅度."set"L08= [保护规则]"set"L09= 以下程序不会被关闭或优化:"set"L10= IDEA, VS Code, Java, Maven, Git, Chrome, Edge,"set"L11= Firefox, MySQL, Redis, Docker, Nacos, Gateway,"set"L12= Explorer, DWM 及所有系统核心进程."set"L13= 每10分钟自动清理一次, 按 Ctrl+C 随时退出."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.set"ROUND=0":LOOP set/a"ROUND+=1"echo==================================================echo 第!ROUND!轮清理 开始时间:%DATE%%TIME%echo==================================================echo.REM===采集清理前系统状态===set"M01=[采集] 清理前系统状态..."echo!M01!for/f%%Min('powershell-NoProfile-Command"(Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory"')doset"FREE_KB_BEFORE=%%M"for/f%%Min('powershell-NoProfile-Command"(Get-CimInstance Win32_OperatingSystem).TotalVisibleMemorySize"')doset"TOTAL_KB=%%M"for/f%%Cin('powershell-NoProfile-Command"(Get-CimInstance Win32_Processor).LoadPercentage"')doset"CPU_BEFORE=%%C"for/f%%Pin('powershell-NoProfile-Command"@(Get-Process).Count"')doset"PROC_BEFORE=%%P"set/a"TOTAL_MB=!TOTAL_KB! / 1024"set/a"FREE_MB_BEFORE=!FREE_KB_BEFORE! / 1024"set/a"USED_MB_BEFORE=!TOTAL_MB! - !FREE_MB_BEFORE!"for/f%%Gin('powershell-NoProfile-Command"[math]::Round(!TOTAL_MB!/1024,2)"')doset"TOTAL_GB=%%G"for/f%%Gin('powershell-NoProfile-Command"[math]::Round(!FREE_MB_BEFORE!/1024,2)"')doset"FREE_GB_BEFORE=%%G"for/f%%Gin('powershell-NoProfile-Command"[math]::Round(!USED_MB_BEFORE!/1024,2)"')doset"USED_GB_BEFORE=%%G"echo.set"B_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"')doset"T_START=%%T"set"S1=[1/6] 正在清理临时文件..."echo!S1!del/q/f/s"%TEMP%\*">nul2>&1del/q/f/s"%LOCALAPPDATA%\Temp\*">nul2>&1set"S2=[2/6] 正在清理浏览器缓存..."echo!S2!ifexist"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache"(del/q/f/s"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache\*">nul2>&1)ifexist"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Code Cache"(del/q/f/s"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Code Cache\*">nul2>&1)ifexist"%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Cache"(del/q/f/s"%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Cache\*">nul2>&1)set"S3=[3/6] 正在清理系统缓存与日志..."echo!S3!del/q/f"%LOCALAPPDATA%\Microsoft\Windows\Explorer\thumbcache_*.db">nul2>&1del/q/f"%APPDATA%\Microsoft\Windows\Recent\*">nul2>&1del/q/f/s"%LOCALAPPDATA%\Microsoft\Windows\WER\*">nul2>&1del/q/f/s"%LOCALAPPDATA%\CrashDumps\*">nul2>&1set"S4=[4/6] 正在刷新 DNS 缓存..."echo!S4!ipconfig/flushdns>nul2>&1set"S5=[5/6] 正在关闭后台冗余进程..."echo!S5!set"KILL_COUNT=0"for%%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/FI"IMAGENAME eq %%P"2>nul|find/I"%%P">nul2>&1ifnoterrorlevel1(taskkill/F/IM"%%P">nul2>&1set/a"KILL_COUNT+=1"))set"S5R= 已关闭 !KILL_COUNT! 个冗余进程"echo!S5R!set"S6=[6/6] 正在优化进程内存工作集..."echo!S6!for/f%%Oin('powershell-NoProfile-Command"$c=0; 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"')doset"OPTIMIZED=%%O"set"S6R= 已优化 !OPTIMIZED! 个进程"echo!S6R!timeout/t3/nobreak>nul echo.set"M02=[采集] 清理后系统状态..."echo!M02!for/f%%Min('powershell-NoProfile-Command"(Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory"')doset"FREE_KB_AFTER=%%M"for/f%%Cin('powershell-NoProfile-Command"(Get-CimInstance Win32_Processor).LoadPercentage"')doset"CPU_AFTER=%%C"for/f%%Pin('powershell-NoProfile-Command"@(Get-Process).Count"')doset"PROC_AFTER=%%P"set/a"FREE_MB_AFTER=!FREE_KB_AFTER! / 1024"set/a"USED_MB_AFTER=!TOTAL_MB! - !FREE_MB_AFTER!"for/f%%Gin('powershell-NoProfile-Command"[math]::Round(!FREE_MB_AFTER!/1024,2)"')doset"FREE_GB_AFTER=%%G"for/f%%Gin('powershell-NoProfile-Command"[math]::Round(!USED_MB_AFTER!/1024,2)"')doset"USED_GB_AFTER=%%G"set/a"MEM_FREED=!FREE_MB_AFTER! - !FREE_MB_BEFORE!"set/a"CPU_DIFF=!CPU_BEFORE! - !CPU_AFTER!"set/a"PROC_DIFF=!PROC_BEFORE! - !PROC_AFTER!"for/f%%Gin('powershell-NoProfile-Command"[math]::Round(!MEM_FREED!/1024,2)"')doset"MEM_FREED_GB=%%G"for/f%%Tin('powershell-NoProfile-Command"[int](Get-Date).TimeOfDay.TotalSeconds"')doset"T_END=%%T"set/a"ELAPSED=!T_END! - !T_START!"if!ELAPSED!LSS0set/a"ELAPSED+=86400"echo.set"A_LINE= 清理后: 内存 !USED_GB_AFTER!/!TOTAL_GB! GB 可用 !FREE_GB_AFTER! GB CPU !CPU_AFTER!%% 进程 !PROC_AFTER!"echo!A_LINE!echo.echo--------------------------------------------------set"R01= 第 !ROUND! 轮清理报告 完成时间: %DATE% %TIME%"echo!R01!echo--------------------------------------------------set"R02= 清理耗时: !ELAPSED! 秒"set"R03= 释放内存: !MEM_FREED_GB! GB"set"R04= CPU 变化: !CPU_BEFORE!%% --^> !CPU_AFTER!%% (降低 !CPU_DIFF!%%)"set"R05= 关闭冗余: !KILL_COUNT! 个进程"set"R06= 优化工作集: !OPTIMIZED! 个进程"set"R07= 进程变化: !PROC_BEFORE! --^> !PROC_AFTER! (减少 !PROC_DIFF!)"echo!R02!echo!R03!echo!R04!echo!R05!echo!R06!echo!R07!echo--------------------------------------------------if!MEM_FREED!GTR1024(set"EVAL= 评价: 效果显著, 释放超过 1 GB 内存")elseif!MEM_FREED!GTR512(set"EVAL= 评价: 效果良好, 系统运行更流畅")elseif!MEM_FREED!GTR0(set"EVAL= 评价: 小幅优化, 系统状态尚可")else(set"EVAL= 评价: 系统状态良好, 无需大量清理")echo!EVAL!echo--------------------------------------------------echo.set"W01= 下一轮清理将在 10 分钟后开始, 按 Ctrl+C 退出..."echo!W01!echo.for/L%%iin(1,1,20)do(set/a"REMAIN=(20-%%i)*30"set/a"RMIN=!REMAIN! / 60"set/a"RSEC=!REMAIN! %% 60"set"WLINE= 等待中... 距下次清理还有 !RMIN! 分 !RSEC! 秒"echo!WLINE!timeout/t30/nobreak>nul)gotoLOOP