尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Windows C盘深度清理指南:从临时文件到DISM的完整实践

Windows C盘深度清理指南:从临时文件到DISM的完整实践 C 盘爆红这个事几乎每个用 Windows 的人都遇到过。装软件、跑开发环境、系统自动更新用着用着 100GB 的 C 盘就只剩下几个 GB然后电脑开始变慢软件启动卡顿甚至干脆弹窗提示磁盘空间不足。很多人第一反应是去删临时文件但删完之后发现空间几乎没变化问题并没有解决。原因在于Windows 的“垃圾文件”不是只存在于 Temp 文件夹里的。系统更新缓存、休眠文件、系统还原点、Windows.old 目录、各类软件缓存每一类都可能占用几个 GB 甚至几十 GB。本文要做的不是教你删一两个文件夹而是系统性拆解 Windows 深度清理的完整流程先判断空间去向再用系统工具和命令行工具逐层清理最后给出一个适合日常维护的一键清理脚本。读完你可以根据自己的实际情况安全地清理出几个 G 到几十个 G 的磁盘空间。1. 这篇文章真正要解决的问题先明确一个判断Windows 垃圾清理的关键不是“删得多”而是“删得准”。普通用户最容易犯的错误是把注意力全放在 C:\Windows\Temp 和浏览器缓存上结果删了半天只释放几百 MB。真正占据大头的往往是你看不见的系统组件。需要关注的核心场景有这几个C 盘只剩几个 GB但又不想重装系统删除临时文件后空间几乎没有变化系统更新后磁盘空间反而越来越少长期跑 Docker、WSL、Elasticsearch、Redis 等开发工具C 盘被缓存在不知不觉中被占满想用脚本或自动化任务定期清理但不知道哪些目录能删、哪些不能动。如果你正在处理以上任何一个问题本文就是给你看的。本文会涉及系统自带工具、命令行清理工具、PowerShell 脚本和开发工具缓存清理全部围绕“安全释放空间”这一个目标展开。关于清理量说实话会比较重要如果这台电脑从来没有深度清理过一次清理出 10GB 以上是非常常见的但如果每周都在做维护那剩余可清理的空间通常只有几百 MB 到 1GB。所以“一键清理 10G”本质上是针对长期未清理的机器而不是一个普适数字。明白这一点你才不会误判清理效果。2. Windows 垃圾文件的来源分类与清理优先级要想高效清理先得知道垃圾藏在哪。我按“产生原因”和“清理风险”把 Windows 常见垃圾分为四类。2.1 安全系数最高的临时文件这一类是我们平时说的“真正的垃圾”可以放心删除用户临时目录C:\Users\用户名\AppData\Local\Temp系统临时目录C:\Windows\Temp回收站内容浏览器缓存缩略图缓存。这些文件的特征是被占用时可以跳过不影响系统运行删除后不会产生功能问题。优先级最高风险最低。2.2 系统更新与组件残留Windows 更新是很稳定的“磁盘杀手”来源。更新下载的安装包会被缓存在 C:\Windows\SoftwareDistribution\Download更新后旧系统文件会被保留部分情况下还会生成 Windows.old 目录。这一类包括Windows 更新缓存C:\Windows\SoftwareDistribution\Download组件存储 WinSxS 中的旧组件传递优化文件C:\Windows\SoftwareDistribution\DeliveryOptimizationWindows.old升级系统后的旧系统备份。WinSxS 目录不能直接手动删除系统组件存储被破坏会导致更新失败甚至系统无法启动正确的做法是用 DISM 命令清理。这里能释放的空间通常很可观。2.3 系统功能与还原点这些不是严格意义的“垃圾”但如果你的磁盘空间紧张它们可以被缩减休眠文件 C:\hiberfil.sys大小通常等于物理内存的 40% 到 100%系统还原点每个还原点可能占用数 GB虚拟内存页面文件 pagefile.sys不建议轻易关闭但可以迁移到其他分区。2.4 开发工具与软件缓存对于开发者这可能是最大的隐藏空间占用npm 缓存C:\Users\用户名\AppData\Local\npm-cachepip 缓存C:\Users\用户名\AppData\Local\pip\cacheDocker Desktop 的 WSL 虚拟磁盘文件常见路径在 C:\Users\用户名\AppData\Local\Docker或通过 WSL 分发的 ext4.vhdxWSL 内部缓存的软件包Elasticsearch、Redis 等工具的日志和数据目录各类 IDE 的索引缓存。不同清涧方式要在正确的工具里面做不能直接去文件管理器里删除 WSL 磁盘文件否则可能导致 Docker 和 WSL 发行版损坏。3. 清理前的准备工作与环境确认深度清理前有几件准备工作必须先做。不要跳过这一步误删文件之后的恢复成本远高于提前备份的成本。3.1 检查当前磁盘空间状态在 PowerShell 或命令提示符中执行Get-PSDrive C | Select-Object Used, Free, {NameUsedGB;Expression{[math]::Round($_.Used/1GB,2)}}, {NameFreeGB;Expression{[math]::Round($_.Free/1GB,2)}}这个命令会列出 C 盘的总使用量、剩余空间。把清理前后的数据记录下来能避免“看起来清了但实际没清多少”的误判。3.2 准备一个还原点这一步是风险管控。创建系统还原点可以在误删、误改配置后快速回滚。打开“创建还原点”窗口的操作路径Win R输入sysdm.cpl回车后切换到“系统保护”选项卡选择 C 盘点击“创建”按钮。还原点创建完毕后再进行后续清理。严格意义上清理临时文件不会影响系统文件但清理工具误判、脚本误操作是真实风险。有还原点兜底总比没有好。3.3 关闭正在运行的大文件占用程序清理前建议关闭浏览器、开发 IDE、Docker Desktop、微信/QQ 这类会持续写入临时文件的程序。否则在清理时部分文件会被锁定导致删除失败脚本日志里会出现大量“拒绝访问”或“文件占用”的提示。3.4 以管理员权限运行大多数清理操作需要管理员权限。右键点击开始菜单选择“终端(管理员)”或者“Windows PowerShell(管理员)”保证执行命令时有足够的权限。4. 先用系统自带的磁盘清理“扫一轮”很多用户不知道的是Windows 自带的磁盘清理工具比想象中有效。它能够识别 Windows 更新清理、系统错误内存转储、传递优化文件、缩略图缓存等选项它比手动删除更安全。4.1 图形界面磁盘清理打开方式有两种方法一Win R输入cleanmgr回车 方法二开始菜单搜索“磁盘清理”以管理员身份运行。在磁盘清理界面默认清理项包括下载的更新、临时文件、缩略图等。这时先不要急着点击“确定”建议先点击“清理系统文件”按钮这样会重新扫描系统更新相关的文件。勾选项目时按你的情况选择“Windows 更新清理”“以前的 Windows 安装”“传递优化文件”“临时文件”“回收站”然后点击“确定”并确认删除。4.2 命令行cleanmgr /sagerun如果你希望把清理流程脚本化可以使用cleanmgr的命令行参数。/sagerun配合注册表预设可以自动运行磁盘清理。先执行一次设置cleanmgr /sageset:1在弹出的磁盘清理窗口中勾选需要清理的项目确定后系统会把选项保存到注册表。之后每次调用下面的命令就会按预设内容自动清理cleanmgr /sagerun:1另一种更直接的方式cleanmgr /d C: /lowdisk/lowdisk参数会使用默认清理设置适合快速释放空间但不会清理“系统文件”里的所有项目。所以深度清理时我仍然建议先用/sageset:1配置好选项再执行/sagerun:1。4.3 开启存储感知Windows 10/11 自带的存储感知可以定期自动清理临时文件。设置路径设置 - 系统 - 存储 - 存储感知。可以配置为“在磁盘空间不足时运行”并勾选“删除临时文件”。对于普通用户这是一个省心的兜底策略对于需要精细控制的开发者我建议仍然定期手动深清一次。5. 深入清理 Windows 更新残留与组件存储磁盘清理工具虽然能处理部分更新缓存但要真正清掉 WinSxS 组件存储里的旧版本还需要 DISM 命令。5.1 什么是 WinSxS 组件存储WinSxSWindows Side-by-Side目录位于 C:\Windows\WinSxS存放系统组件的所有版本。Windows 更新安装新版本组件后旧版本不会被立即删除这是为了支持系统还原和组件回滚机制。正常来说WinSxS 目录会有几十 GB 甚至更大。大部分情况下它被硬链接引用你看到的文件大小和磁盘实际占用并不完全一致。因此无论磁盘空间多紧张都不能手动删除 WinSxS 里的文件。正确做法是使用 DISM 的系统组件清理命令。5.2 DISM 组件清理命令以管理员身份打开命令提示符或 PowerShell执行DISM.exe /Online /Cleanup-Image /StartComponentCleanup这个命令会清理被取代的组件版本。如果你希望进一步压缩组件存储可以使用DISM.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase/ResetBase会删除所有已存在的组件版本只保留当前版本。这意味着之后你将无法卸载已安装的 Windows 更新。对于一般用户来说这个选项也可以接受但需要注意它的不可逆性。如果还在犹豫可以只执行第一条命令。5.3 清理 SoftwareDistribution 缓存SoftwareDistribution 是 Windows 更新下载缓存的存放位置。删除这里的文件不会影响系统更新功能Windows 会根据需要重新下载必要的文件。停止更新服务后删除更稳妥net stop wuauserv net stop bits del /f /s /q C:\Windows\SoftwareDistribution\Download\*.* rd /s /q C:\Windows\SoftwareDistribution\Download net start wuauserv net start bits注意rd会删除整个下载目录之后系统会重建它。如果你正在下载重要的更新包删除后需要重新下载。这一条动作在空间紧张时很有效。6. PowerShell 深度清理脚本一次删掉绝大多数垃圾对于熟悉命令行的用户我推荐用一个组合脚本完成基础的深度清理。下面这个脚本会处理四类内容临时目录、Windows 更新缓存、传递优化文件、回收站。6.1 脚本内容# 文件路径C:\Scripts\Windows-Cleaner.ps1 # 使用方法以管理员身份打开 PowerShell执行 Set-ExecutionPolicy -Scope Process Bypass # 然后运行powershell -ExecutionPolicy Bypass -File C:\Scripts\Windows-Cleaner.ps1 Write-Host Windows 深度清理开始 -ForegroundColor Cyan $startTime Get-Date # 1. 清理用户临时目录 $userTemp $env:LOCALAPPDATA\Temp if (Test-Path $userTemp) { Remove-Item $userTemp\* -Recurse -Force -ErrorAction SilentlyContinue Write-Host [完成] 用户临时目录已清理$userTemp -ForegroundColor Green } # 2. 清理系统临时目录 $systemTemp $env:SystemRoot\Temp if (Test-Path $systemTemp) { Remove-Item $systemTemp\* -Recurse -Force -ErrorAction SilentlyContinue Write-Host [完成] 系统临时目录已清理$systemTemp -ForegroundColor Green } # 3. 清理 Windows 更新下载缓存 $updateCache $env:SystemRoot\SoftwareDistribution\Download if (Test-Path $updateCache) { Remove-Item $updateCache\* -Recurse -Force -ErrorAction SilentlyContinue Write-Host [完成] Windows 更新下载缓存已清理 -ForegroundColor Green } # 4. 清理传递优化文件 $deliveryCache $env:SystemRoot\SoftwareDistribution\DeliveryOptimization if (Test-Path $deliveryCache) { Remove-Item $deliveryCache\* -Recurse -Force -ErrorAction SilentlyContinue Write-Host [完成] 传递优化文件已清理 -ForegroundColor Green } # 5. 清理回收站 Clear-RecycleBin -Force -ErrorAction SilentlyContinue Write-Host [完成] 回收站已清空 -ForegroundColor Green # 6. 清理 Windows 错误报告文件 $werCache $env:LOCALAPPDATA\Microsoft\Windows\WER\ReportQueue if (Test-Path $werCache) { Remove-Item $werCache\* -Recurse -Force -ErrorAction SilentlyContinue Write-Host [完成] Windows 错误报告队列已清理 -ForegroundColor Green } $endTime Get-Date $elapsed ($endTime - $startTime).TotalSeconds Write-Host 清理完成用时 $([math]::Round($elapsed,2)) 秒 -ForegroundColor Cyan6.2 脚本关键说明这条脚本的核心点是-ErrorAction SilentlyContinue。清理时有些文件正在被系统占用Windows 会拒绝删除。加上这个参数后脚本会跳过无法删除的文件而不会中断整个流程。这是脚本不会“卡死”的关键。另一个细节是更新缓存目录中的文件删除时如果 Windows 更新服务正在运行部分文件会被锁定。脚本里没有停服务而是直接删这是因为大多数情况下 Download 目录里未被锁定的历史积累文件足够多能释放的空间已经很大。如果要彻底清理建议配合第 5 节里的net stop wuauserv先停止服务。6.3 运行方式在管理员 PowerShell 中执行powershell -ExecutionPolicy Bypass -File C:\Scripts\Windows-Cleaner.ps1为了安全脚本执行前建议先确认路径中的 $env:LOCALAPPDATA 指向的是当前用户目录。可以提前执行echo $env:LOCALAPPDATA确认。7. 进阶场景休眠文件、还原点、Windows.old 与开发工具缓存如果你的磁盘空间缺口比较大上面的基础清理可能还不够。下面这些场景能进一步释放空间但操作时要多加注意。7.1 休眠文件 hiberfil.sys休眠功能会在 C 盘根目录生成 hiberfil.sys 文件大小约为物理内存的 40% 到 100%。如果你从不使用“休眠”模式只使用“睡眠”可以关闭休眠来释放这部分空间。以管理员身份打开命令提示符powercfg /h off执行后 hiberfil.sys 会被删除。如果你想重新开启休眠powercfg /h on需要注意关闭休眠会让 Windows 失去“休眠”和“混合睡眠”能力但对日常使用影响不大。7.2 系统还原点还原点是系统安全的重要保护机制。不建议全部删除但如果还原点很多且磁盘紧张可以只保留最近一个。在磁盘清理工具中点击“清理系统文件”后切换到“其他选项”选项卡在“系统还原和影子复制”一栏点击“清理”然后选择“删除”或“删除除最新还原点之外的所有还原点”。命令行操作vssadmin delete shadows虽然也能删除但风险较高一旦误操作可能导致所有还原点被删日常并不推荐在清理教程中使用。7.3 Windows.old 目录如果你的系统是从旧版本升级上来的C:\Windows.old 会占用几个 GB 到几十 GB。它可以在磁盘清理工具里找到“以前的 Windows 安装”选项勾选后删除。也可以使用命令行rd /s /q C:\Windows.old这个目录只用于回滚到旧版本系统。确认新系统稳定后再删除否则一旦删除你将无法直接回滚到升级前的版本。7.4 开发工具缓存清理开发场景的缓存清理容易被忽略。下面几个命令都能安全清理各自的缓存npm 缓存npm cache clean --forcepip 缓存pip cache purgeDocker 的系统级清理docker system prunedocker system prune会删除所有未被使用的容器、网络、镜像和构建缓存。执行前系统会提示确认你可以根据项目情况决定是否加-a参数删除所有未使用的镜像。如果是还在使用的项目不建议执行带-a的版本。WSL 发行版内部的临时文件可以进入 WSL 后执行sudo apt cleanDocker Desktop 在 WSL2 模式下会生成 ext4.vhdx 文件这个文件会随着镜像和容器的增删而不断膨胀。WSL2 的虚拟磁盘通常不会自动收缩长期使用后可能会占掉几十 GB 空间。如果你遇到这种问题需要在 Docker Desktop 设置里清空数据或使用wsl --shutdown后通过 diskpart 压缩 vhdx 文件。这个过程涉及虚拟磁盘操作建议先备份数据再操作在没有把握时不推荐新手直接执行。8. 综合一键清理脚本适合本机日常维护前面几节的内容比较分散这里我给一个综合脚本把临时文件、更新缓存、回收站、传递优化文件集中清理。它适合定期在开发机上执行。8.1 BAT 脚本示例echo off chcp 65001 nul title Windows 深度清理脚本 echo echo Windows 深度清理脚本管理员权限运行 echo echo [1/5] 正在清理系统临时文件... del /f /s /q %SystemRoot%\Temp\*.* nul 21 for /d %%i in (%SystemRoot%\Temp\*) do rd /s /q %%i nul 21 echo [2/5] 正在清理用户临时文件... del /f /s /q %LocalAppData%\Temp\*.* nul 21 for /d %%i in (%LocalAppData%\Temp\*) do rd /s /q %%i nul 21 echo [3/5] 正在清理 Windows 更新下载缓存... net stop wuauserv nul 21 del /f /s /q %SystemRoot%\SoftwareDistribution\Download\*.* nul 21 rd /s /q %SystemRoot%\SoftwareDistribution\Download nul 21 net start wuauserv nul 21 echo [4/5] 正在清理传递优化文件... del /f /s /q %SystemRoot%\SoftwareDistribution\DeliveryOptimization\*.* nul 21 for /d %%i in (%SystemRoot%\SoftwareDistribution\DeliveryOptimization\*) do rd /s /q %%i nul 21 echo [5/5] 正在清空回收站... powershell -Command Clear-RecycleBin -Force nul 21 echo echo 清理完成建议重启一次系统验证效果。 echo pause8.2 BAT 脚本使用说明将以上内容保存为Windows-Cleaner.bat然后右键选择“以管理员身份运行”。这个脚本并不复杂但它比人工删除更高效。需要注意几件事第一脚本中的net stop wuauserv会临时停止 Windows 更新服务执行完再重新启动。如果电脑正在下载更新此时执行会中断下载过程之后系统会自动重新下载。第二del /f /s /q和rd /s /q的组合可以删除目录或文件。被占用的文件会被跳过但不会影响脚本继续执行。第三这是一个适合本机维护的脚本不适合直接用于生产服务器。清理 Windows 更新缓存、清空回收站等操作在生产服务器上需要遵循公司变更流程并提前做好备份。9. 常见问题与排查思路清理过程中你可能会遇到下面这些问题。我按“现象、原因、排查方式、解决方案”的格式整理成表。问题现象可能原因排查方式解决方案磁盘清理使用 cleanmgr /sagerun 后没有反应/sageset 没有预先配置或配置目录不是当前用户在注册表检查 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches 是否存在配置先执行 cleanmgr /sageset:1 勾选项目再运行清理临时文件夹后空间几乎没有变化大量空间被 WinSxS、休眠文件或开发工具缓存占用使用 Get-PSDrive C 查看总体占用再逐项检查执行 DISM 组件清理检查 hiberfil.sys清理 Docker/WSL 虚拟磁盘删除 SoftwareDistribution 后Windows 更新一直失败删除方式不正确导致下载目录处于异常状态查看 Windows 更新服务是否正常启动检查 C:\Windows\SoftwareDistribution 目录是否重建以管理员身份运行“停止服务-删除-启动服务”流程必要时执行sfc /scannowDISM 组件清理报错 0x800f081f系统组件源损坏或网络请求失败查看 CBS 日志C:\Windows\Logs\CBS\CBS.log优先重试或使用DISM /Online /Cleanup-Image /RestoreHealth修复再执行组件清理清空回收站后误删文件无法找回回收站是纯删除操作文件超出回收站容量也会被直接删除确认删除前是否备份过文件养成使用还原点和文件历史记录的习惯开发项目必须接入 Git休眠文件关闭后笔记本睡眠很快耗电关闭休眠影响了混合睡眠检查电源计划中的睡眠设置重新开启休眠powercfg /h on或调高睡眠唤醒阈值清理后 C 盘空间不降反升系统更新刚下载了新缓存或 WSL 虚拟磁盘扩展后未收缩对比清理前后 Get-PSDrive C 输出清理后再观察 24 小时必要时压缩 WSL vhdx还有一个常见误区是“用 360、某管家垃圾清理后空间还是不够”。这类第三方工具的清理逻辑通常比较保守主要扫临时文件和浏览器缓存对 WinSxS、休眠文件这些深层占用无能为力。与其安装更多常驻软件不如先用 Windows 自带能力和本文的脚本处理。10. 最佳实践什么样的清理节奏最合理一次性把磁盘清理干净只是治标更值得做的是建立一套可持续的维护节奏。10.1 设置存储感知自动清理在 Windows 设置 - 系统 - 存储中开启存储感知设置为“在磁盘空间不足时运行”。这样磁盘不足时系统能自动清除临时文件避免突发性空间危机。10.2 定期执行深度清理建议每隔 1 到 2 个月执行一次深度清理操作顺序如下第一步运行 cleanmgr /sageset 配置并清理第二步运行 DISM 组件清理命令清理更新残留第三步运行 PowerShell 或 BAT 脚本清理临时文件和回收站第四步检查是否关闭休眠、清理还原点第五步如果是开发者检查 Docker、WSL、npm、pip 的缓存占用。10.3 善用计划任务你可以把前面第 8 节的 BAT 脚本挂到 Windows 任务计划程序里选择“按用户登录时运行”或“按周运行”。生产环境不要这样做但对个人开发机来说自动化清理能省去很多手工操作。创建任务时记得勾选“使用最高权限运行”。10.4 生产环境与开发环境分开对待生产环境的 Windows Server 不建议执行一键清理脚本。系统更新文件的清理、组件存储的压缩都建议先在测试服务器验证再走变更评审流程。最小权限原则在这里同样适用能只清理日志就不要动系统目录能先备份就不要直接删。10.5 养成最小化安装的习惯从根源上减少垃圾比事后清理更有效。安装软件时尽量选择“仅为我安装”避免安装到 C 盘以外的软件也把缓存写到 C 盘开发工具能改数据目录的就改数据目录大体积的 Docker 镜像和 WSL 发行版尽量放在空间充裕的分区。这样才能从根本上缓解 C 盘压力。Windows 深度清理并不复杂但它依赖系统工具、命令行脚本和建立正确的维护节奏。先把第 4 节和第 5 节的方法完整跑一遍再决定是否使用第 8 节的脚本你会发现自己对系统磁盘空间的掌控力明显不一样。建议先把 cleanmgr 和 DISM 这两条命令保存下来下次 C 盘告急的时候它们会比任何“一键装机优化”工具都可靠。
返回列表