拓冰建站拓冰建站
首页 / 资讯中心 / 正文

C盘飘红?Windows深度清理完整指南与一键脚本

C 盘又飘红了Windows 用上一段时间系统盘空间肉眼可见地往下掉开个软件都要转半天圈。更难受的是用系统自带的磁盘清理点半天删出来也就几百 MB过几天又满了。这篇文章不是简单教你点一下“磁盘清理”而是一套从系统自带工具到命令行批量清理、再到一键脚本的完整方案。我会把哪些能删、哪些不能动、为什么能删、删了之后有什么影响都讲清楚并提供一个可以直接运行的“一键深度清理”脚本帮你在安全范围内把 C 盘空间释放出来日常清理出几个 G 甚至十几个 G 都很正常。文章适合两类读者一类是电脑用久了不想重装系统、想自己动手做深度清理的普通用户另一类是给公司电脑、实验室机器、测试环境做批量维护的开发者或运维同学。前者可以照着可视化操作后者可以直接拿脚本改一改集成到自己的维护工具里。1. 背景与核心概念1.1 Windows 垃圾文件到底是什么所谓“垃圾文件”不是一个标准术语而是对系统运行过程中产生的临时文件、缓存文件、日志文件、更新残留、卸载残留等文件的统称。这些文件不是完全没有用但属于“用完了就丢”或者“已经过期但仍然躺在磁盘上”的数据。常见的来源包括浏览器缓存的网页图片、脚本、视频片段。Windows Update 下载的安装包和补丁备份。软件运行过程中生成的临时文件例如 Office、Photoshop、微信、QQ。系统错误报告WER文件夹里积累的错误转储文件。缩略图缓存、字体缓存、DirectX 着色器缓存。回收站里没有彻底删除的文件。休眠文件 hibernate.sys 占用的空间。各种软件升级时残留的旧版本文件。这些文件的特点是单个文件可能很小但数量庞大日积月累可以达到好几个 G甚至十几个 G。1.2 区分“可清理”和“不建议清理”深度清理最怕的不是清不干净而是清错东西。下面这张表可以帮助你快速判断路径或文件作用是否可以清理清理方式C:\Users\用户名\AppData\Local\Temp当前用户的临时文件可以正在使用的文件会跳过删除文件内容C:\Windows\Temp系统临时文件可以正在使用的文件会跳过管理员删除C:\Windows\SoftwareDistribution\DownloadWindows Update 下载缓存可以但建议先停止更新服务删除文件内容C:\Windows\Prefetch程序预读取文件可以但会短暂影响启动速度删除文件内容C:\Windows\LiveKernelReports内核转储报告可以删除文件内容C:\ProgramData\Microsoft\Windows\WER系统错误报告可以删除文件内容C:\$Recycle.Bin回收站可以会造成回收站文件无法恢复清空回收站C:\Windows\WinSxS组件存储即“Windows 组件存储”不能直接删整个目录必须用 DISM 清理使用Dism /StartComponentCleanupC:\Windows\System32系统核心文件不能动不清理C:\Windows\Installer软件安装补丁缓存不建议手动删除可能导致卸载软件失败不清理hiberfil.sys休眠文件如果不使用休眠功能可以关闭powercfg /h offpagefile.sys页面文件虚拟内存不建议关闭可以迁移到其他盘不清理1.3 为什么清理一下能释放好几个 G很多人以为 C 盘空间不足是软件装太多了其实真正吃空间的往往是这几类隐藏大户Windows 更新组件缓存每次大版本更新后旧的组件文件仍然保留可能占 2~5 GB。休眠文件默认大小为物理内存的 40% 到 75%如果你有 16GB 内存这个文件可能有 6GB 以上。浏览器缓存和软件缓存积攒半年以上轻松超过 5GB。回收站很多人习惯把文件删到回收站就不管了累积几个 G 很常见。所以深度清理和普通清理的差别在于普通清理只清表面深度清理要把上面这些隐藏项目全部处理一遍。2. 环境准备与版本说明本文示例以 Windows 10 和 Windows 11 为主两个版本的操作逻辑基本一致。Windows 7 部分命令可能不适用建议按实际系统调整。清理前需要做好以下准备使用管理员身份登录系统。清理系统临时文件、Windows Update 缓存、执行 DISM 命令都需要管理员权限。关闭正在运行的占用文件程序例如浏览器、Office、微信、QQ、视频编辑软件等。否则部分临时文件会被占用清理脚本会跳过它们。建议先做一次磁盘备份或至少把重要文件确认已保存到其他磁盘。任何清理操作都有一定风险备份是底线。本项目本身不涉及安装额外软件使用系统自带的cmd、PowerShell、cleanmgr和Dism命令即可。脚本在 Windows 10 1809 及以上版本测试通过Windows 11 23H2、24H2 均可使用。3. 使用系统自带功能完成基础清理3.1 磁盘清理工具 cleanmgrWindows 自带的磁盘清理工具“磁盘清理cleanmgr”是最安全的清理入口。它会把可以清理的项目列出来由你自己勾选不会误删系统关键文件。直接在“开始”菜单搜索“磁盘清理”选择 C 盘工具会先扫描可清理的文件然后弹出勾选列表。第一次扫描后点击“清理系统文件”会再次扫描出 Windows 更新清理、系统还原等深度项目。常见可勾选项目包括Windows 更新清理回收站临时文件缩略图DirectX 着色器缓存传递优化文件系统还原和卷影副本如果你想通过命令行快速启动磁盘清理可以使用cleanmgr /d C:如果希望它自动勾选所有项目可以配合sageset和sagerun使用:: 第一次运行会弹出配置窗口勾选所有要清理的项目 cleanmgr /sageset:100 :: 配置完后之后每次运行会按保存的配置执行清理 cleanmgr /sagerun:100注意/sageset:100中的100是一个自定义编号可以随便写只要两次命令保持一致即可。3.2 开启存储感知Windows 10 1803 之后和 Windows 11 都内置了“存储感知”功能。它会定期自动清理临时文件和回收站文件。设置路径设置 - 系统 - 存储 - 存储感知。建议开启“自动清理临时文件”并设置回收站保留时间为 1 天或 14 天。如果你不想让系统自动删除回收站里的关键文件可以把回收站保留时间改成“从不”但这样就无法自动释放回收站空间了需要手动清空。3.3 关闭休眠文件释放内存同等大小的磁盘空间休眠文件是C:\hiberfil.sys它的大小大约占物理内存的 40% 到 75%。如果你几乎不用“休眠”功能只使用“睡眠”和“关机”完全可以把休眠功能关掉。在管理员命令行或 PowerShell 中执行:: 关闭休眠删除 hiberfil.sys powercfg /h off执行后C 盘会立刻释放几个 GB 的空间具体大小取决于你的内存容量。如果之后需要重新开启休眠执行powercfg /h on也可以在 PowerShell 中精确设置休眠文件大小为内存的 40%powercfg /h /type reduced3.4 使用 DISM 清理 Windows 组件存储之前提到过C:\Windows\WinSxS不能直接删除但可以使用系统自带的 DISM 工具进行组件清理。这个操作比较耗时但能释放大量空间尤其是系统升级过多次之后。在管理员命令行中执行dism /online /cleanup-image /startcomponentcleanup如果还想更激进一点可以附加参数ResetBase它会将所有组件的旧版本标记为可删除释放更多空间但代价是之后无法卸载当前已安装的更新dism /online /cleanup-image /startcomponentcleanup /resetbase这个命令执行时可能需要几分钟到几十分钟期间不要强制关闭电脑。4. 编写一键清理脚本4.1 脚本设计思路系统自带功能虽然安全但要手动点很多步骤。真正要“一键清理”需要使用批处理脚本来批量执行删除命令。脚本设计遵循几个原则不删除正在使用的文件。删除命令在遇到被占用文件时会报错脚本通过2nul隐藏错误继续执行后续清理。分区域清理每部分有日志记录方便排查问题。不触碰系统核心目录如System32、Installer、WinSxS。不包含“格式化”“还原系统”等高风险命令脚本只清理安全的垃圾文件。脚本默认使用管理员权限运行。建议你在运行前先打开记事本把脚本内容保存为.bat文件再右键“以管理员身份运行”。4.2 完整的一键清理批处理脚本下面是一个可以直接保存运行的脚本。请保存为C:\Scripts\clean_windows.bat编码建议使用 ANSI 或 UTF-8 with BOM避免中文乱码。echo off chcp 65001 nul title Windows 深度清理脚本 color 0A :: 检查管理员权限 net session nul 21 if %errorLevel% neq 0 ( echo [错误] 请右键以管理员身份运行此脚本。 pause exit /b 1 ) echo echo Windows 深度清理脚本 echo 执行前请关闭浏览器、Office、QQ 等程序 echo echo. set LOG_FILEC:\Scripts\clean_log_%date:~0,4%%date:~5,2%%date:~8,2%.txt if not exist C:\Scripts mkdir C:\Scripts echo [%time%] 清理开始 %LOG_FILE% :: 1. 清理用户临时文件 echo [1/10] 正在清理用户临时文件 ... for /d %%i in (%TEMP%\*) do rd /s /q %%i 2nul del /q /f %TEMP%\* 2nul :: 2. 清理系统临时文件 echo [2/10] 正在清理系统临时文件 ... for /d %%i in (C:\Windows\Temp\*) do rd /s /q %%i 2nul del /q /f C:\Windows\Temp\* 2nul :: 3. 清理 Windows 更新下载缓存 echo [3/10] 正在清理 Windows 更新下载缓存 ... net stop wuauserv nul 21 net stop bits nul 21 for /d %%i in (C:\Windows\SoftwareDistribution\Download\*) do rd /s /q %%i 2nul del /q /f C:\Windows\SoftwareDistribution\Download\* 2nul net start wuauserv nul 21 net start bits nul 21 :: 4. 清理预读取文件 echo [4/10] 正在清理预读取文件 ... del /q /f C:\Windows\Prefetch\* 2nul :: 5. 清理缩略图缓存 echo [5/10] 正在清理缩略图缓存 ... del /q /f %LOCALAPPDATA%\Microsoft\Windows\Explorer\thumbcache_*.db 2nul del /q /f %LOCALAPPDATA%\Microsoft\Windows\Explorer\iconcache_*.db 2nul :: 6. 清理 DirectX 着色器缓存 echo [6/10] 正在清理 DirectX 着色器缓存 ... for /d %%i in (%LOCALAPPDATA%\D3DSCache\*) do rd /s /q %%i 2nul for /d %%i in (C:\Windows\System32\DriverStore\FileRepository\*.d3d*) do rd /s /q %%i 2nul :: 7. 清理 Windows 错误报告 echo [7/10] 正在清理 Windows 错误报告 ... for /d %%i in (C:\ProgramData\Microsoft\Windows\WER\*) do rd /s /q %%i 2nul for /d %%i in (%LOCALAPPDATA%\Microsoft\Windows\WER\*) do rd /s /q %%i 2nul :: 8. 清理软件分发目录下的日志文件 echo [8/10] 正在清理系统日志 ... for /F tokens* %%G in (wevtutil el) do (call wevtutil cl %%G 2nul) :: 9. 清空回收站 echo [9/10] 正在清空回收站 ... rd /s /q C:\$Recycle.bin 2nul :: 10. 刷新 DNS 缓存 echo [10/10] 正在刷新 DNS 缓存 ... ipconfig /flushdns nul 21 echo. echo echo 清理完成 echo 日志文件%LOG_FILE% echo echo [%time%] 清理结束 %LOG_FILE% pause4.3 脚本关键段落讲解chcp 65001的作用是把命令行代码页切换为 UTF-8避免脚本中的中文注释和提示在部分系统上显示成乱码。如果你使用的是 Windows 11系统默认控制台字体基本都能正常显示 UTF-8如果显示异常可以把脚本另存为 ANSI 编码。net session nul 21是常见的权限检测方式。如果当前不是管理员身份这条命令会失败errorLevel不为 0脚本会给出提示并退出。如果你想让它自动请求管理员权限可以配合 PowerShell 的Start-Process -Verb RunAs实现但这会涉及 UAC 弹窗这里不展开。清理用户临时文件和系统临时文件时使用了for /d和del组合。for /d会删除当前目录下的子目录del删除文件。加2nul是为了隐藏“正在使用文件”之类的错误提示避免脚本中断。清理 Windows 更新缓存时先停止wuauservWindows Update 服务和bits后台智能传输服务删除SoftwareDistribution\Download下的文件后再重启服务。这一步是为了避免更新服务正在写入文件导致删除失败。注意如果这两个服务没有正常停止删除后可能会造成更新状态异常所以脚本里使用net start确保服务恢复。关于日志文件脚本会记录开始和结束时间路径是C:\Scripts\clean_log_日期.txt。如果你不想创建日志可以删掉相关行。4.4 PowerShell 进阶版本清理前先看空间占用批处理脚本适合快速删除但如果你想在清理前知道哪些目录最占空间可以用 PowerShell 写一个统计脚本。这个脚本会扫描 C 盘常见缓存目录的大小并按从大到小排序显示。# 文件路径C:\Scripts\Get-CacheSize.ps1 $paths { 用户临时文件 $env:TEMP 系统临时文件 C:\Windows\Temp Windows更新缓存 C:\Windows\SoftwareDistribution\Download 预读取文件 C:\Windows\Prefetch 错误报告 $env:LOCALAPPDATA\Microsoft\Windows\WER 缩略图缓存 $env:LOCALAPPDATA\Microsoft\Windows\Explorer 浏览器缓存 $env:LOCALAPPDATA\Google\Chrome\User Data\Default\Cache } $results foreach ($key in $paths.Keys) { $path $paths[$key] if (Test-Path $path) { $size (Get-ChildItem $path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]{ 路径 $path 大小MB [math]::Round($size / 1MB, 1) } } } $results | Sort-Object 大小MB -Descending | Format-Table -AutoSize在 PowerShell 中执行时如果提示“禁止运行脚本”需要先修改执行策略Set-ExecutionPolicy -Scope CurrentUser RemoteSigned或者直接右键脚本选择“使用 PowerShell 运行”。4.5 运行与验证双击保存好的clean_windows.bat右键选择“以管理员身份运行”。脚本开始执行后会依次输出清理进度。正常情况会在 1 到 3 分钟内结束取决于磁盘文件数量和速度。执行完后再看一下 C 盘剩余空间。在“此电脑”里看或者在命令行执行wmic logicaldisk where captionC: get size,freespace输出示例Caption FreeSpace Size C: 35829702656 127898353664单位是字节除以 1024/1024/1024 之后就是 GB。如果脚本运行后你发现某些正在使用的文件删不掉这属于正常现象。它们会在电脑重启后、对应程序关闭后等下次清理时再处理。你可以在任务管理器中查看是哪个进程占用了文件。5. 常见问题与排查思路5.1 出现“另一个程序正在使用此文件进程无法访问”问题现象常见原因解决思路清理时提示文件占用浏览器、Office、微信、QQ 等程序正在运行先关闭相关程序再运行脚本临时文件删除不干净系统服务或杀毒软件占用重启后再运行一次脚本系统更新缓存删除失败Windows Update 服务没有完全停止手动停止 wuauserv、bits 后再删如果是某个具体文件被占用可以通过资源监视器任务管理器 - 性能 - 打开资源监视器 - CPU - 关联的句柄搜索文件名找到占用进程后结束进程再执行清理。5.2 运行脚本后 C 盘空间没有明显变化可能原因你删的文件本身很小真正占空间的大头没有处理。建议先用 4.4 节的 PowerShell 脚本扫描一下看看哪个目录最大。休眠文件没有关闭。检查powercfg /h off是否执行成功。Windows 更新组件存储占用较大需要使用 DISM 清理组件存储而不仅仅是删除 Download 目录。页面文件pagefile.sys和休眠文件hiberfil.sys是隐藏文件默认不显示但在 C 盘根目录占用几个 G。休眠文件关闭后自动删除页面文件不建议删除。5.3 清理后电脑反而变卡了这种情况一般出现在清理了预读取文件Prefetch之后。预读取文件的作用是加速常用软件的启动删除后首次启动软件会变慢但属于一次性影响。系统会在后续使用中重新生成预读取文件所以不用太担心。如果你删除了缩略图缓存首次打开图片文件夹时缩略图需要重新生成打开速度会慢一些后续会恢复正常。如果持续卡顿建议检查是否误删了系统关键文件。排查方法在管理员命令行执行系统文件检查sfc /scannow如果提示“资源保护找到了损坏文件但其中有一些文件无法修复”可以继续执行dism /online /cleanup-image /restorehealth然后再运行一次sfc /scannow。5.4 不小心把有用文件删了怎么办如果删除后还没有清空回收站可以立即进入回收站找回文件。但脚本会清空回收站所以回收站找回这条路线不一定有效。如果文件是被移动到回收站后又被脚本清空可以使用文件恢复工具尝试恢复。但成功率取决于磁盘是否有新数据写入越早停止使用 C 盘、越快执行恢复成功率越高。停止一切写入操作后可以使用常见的文件恢复工具扫描 C 盘但需要强调任何恢复操作都不能保证 100% 找回来所以清理前把重要文件回收到其他盘才是根本。6. 最佳实践与维护建议6.1 清理频率建议轻度清理临时文件、浏览器缓存每周一次。中度清理加上回收站、缩略图、错误报告每半个月一次。深度清理加上 Windows 更新缓存、休眠文件、DISM 组件清理每个季度一次或者系统大版本更新后一次。清理频率要根据使用习惯调整。重度办公、经常安装软件、经常更新系统的电脑垃圾文件增长更快清理间隔要缩短。6.2 不要盲目追求“清零”清理的目的是释放空间不是追求把 C 盘占用降到最低。过度清理会带来两个问题缓存被删除后软件重新生成缓存需要时间表现为打开网页变慢、软件首次启动变慢。频繁清理可能导致某些软件出现异常例如聊天记录中的图片重新加载、下载记录丢失。建议在 C 盘剩余空间低于 20% 或者明显影响系统运行时再做深度清理。日常使用时保持定期清理临时文件就够了。6.3 让脚本运行更安全如果你打算把脚本集成到自动化维护流程中可以给脚本增加几个保护机制在脚本开头创建还原点或者至少输出删除文件清单。但批处理脚本输出清单比较烦琐更推荐用 PowerShell 编写清理脚本删除前先把列表写入 CSV 文件。增加pause配置开关日常手动运行可以保留pause如果放到计划任务里建议去掉pause改为写日志。禁用脚本对C:\Windows\Installer、C:\Windows\System32、C:\Windows\WinSxS的删除操作。6.4 日志与自动化推荐的做法是创建一个计划任务每周自动运行一次清理脚本并把日志输出到指定目录。这样既不用每次手动操作也能在日志中查看哪些目录被清理了多少。使用计划任务创建每周清理的示例命令schtasks /create /tn WindowsCleanTask /tr C:\Scripts\clean_windows.bat /sc weekly /d SUN /st 03:00 /ru SYSTEM /rl HIGHEST注意把脚本放到系统计划任务里运行时由于/ru SYSTEM是最高权限不会弹 UAC但对脚本安全性的要求更高。请确保脚本内容是你自己写的、可信任的避免下载未知来源的“一键清理脚本”直接放入计划任务。6.5 数据安全底线最后强调一点任何清理操作都是有风险的操作无论脚本写得多么完善都无法替代备份。执行深度清理前请至少确认以下内容已经备份到其他盘或云盘桌面上的文件。浏览器收藏夹、密码信息。微信/QQ 聊天记录中的重要图片和文件。数据库、项目代码、文档资料。不要等到清完了才发现重要文件在回收站里已经找不回来了。7. 总结与下一步学习方向这篇文章主要围绕 Windows 深度清理展开从垃圾文件的来源讲起介绍了系统自带磁盘清理、存储感知、休眠文件关闭、DISM 组件清理并给出了一个完整的批处理一键清理脚本和 PowerShell 空间统计脚本。掌握这些内容后大部分 C 盘空间不足的场景都可以自己解决不需要安装第三方清理软件也不用急着重装系统。实际维护过程中我一般会在重装系统后第一时间做两件事一是把休眠文件关掉二是开启存储感知并设置合理的回收站保留时间。这套组合至少能让 C 盘在一年内不会因为垃圾文件堆积而爆红。下一步如果你想继续深入可以研究这几个方向一是用 PowerShell 写更完善的清理脚本支持白名单、黑名单、日志分析二是结合计划任务做无人值守清理三是学习 Windows 系统镜像精简和封装技术从源头减少系统占用的空间。如果你平时用的是多台电脑或者需要给同事、客户的电脑做维护建议把脚本中的日志路径、清理目录按不同环境微调并增加删除前的确认环节。清理一时爽安全更重要动手之前记得先把重要文件备份好。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门