FEATURED · 精选文章

Windows磁盘清理全攻略:命令、脚本与开源工具实操

发布时间 / 2026/9/4 20:38:08
来源 / 创域科博编辑部
栏目 / 资讯中心
Windows磁盘清理全攻略:命令、脚本与开源工具实操 磁盘空间被占满这件事基本是每个用过 Windows 的人都会撞上的坎。打开资源管理器看到 C 盘变红不知道从哪里下手用系统自带的磁盘清理扫了半天删掉的东西却不多反而把时间耗进去了。这次我们来看一种更直接的清理方式用一条命令、一个脚本或一个开源小工具把磁盘清理这件事变成真正的一键操作而不是层层点菜单。这篇文章不只讲“用哪款工具”还会把 Windows 自带能力、命令行清理脚本、第三方开源工具三种方案都过一遍。你会知道哪些目录最占地方、哪些缓存可以放心删、清理之后怎么确认效果、遇到删不掉的文件怎么处理。如果你平时要给同事、客户或家里的电脑做维护这篇文章可以直接收藏。1. 核心能力速览先给一张表把三种主流方案的规格和适用范围看清楚。方案类型代表工具适用系统启动方式是否需要安装主要清理对象是否支持命令行适合场景Windows 自带磁盘清理 cleanmgrWindows 10 / 11图形界面 / 命令行不需要系统缓存、临时文件、更新残留支持可配置自动清理快速日常清理Windows 自带存储感知 Storage SenseWindows 10 / 11设置界面 / 注册表配置不需要临时文件、回收站、下载文件夹可通过注册表策略配置定时自动清理命令行脚本PowerShell 清理脚本Windows 10 / 11PowerShell 执行不需要临时目录、Windows 更新缓存、缩略图缓存本就是命令行批量维护、IT 运维开源图形工具BleachBitWindows / Linux图形界面 / 命令行需要安装或便携版浏览器缓存、日志、临时文件、应用缓存支持带白名单和排除项不想写脚本的用户磁盘占用分析WizTree / TreeSizeWindows图形界面需要安装或用便携版不直接清理负责分析WizTree 无完整 CLI先找出大头再清理从这张表可以看出大部分场景其实不需要额外付费软件。系统自带工具加一个 PowerShell 脚本已经能覆盖 90% 的临时文件和缓存清理。真正需要第三方工具的主要是两步第一找到“到底是什么文件占了大头”第二处理那些零散在各应用目录下的缓存文件。2. 适用场景与使用边界任何磁盘清理工具本质上都在做同一件事删除不再需要的文件。删除文件是不可逆操作所以使用边界必须先说清楚。2.1 适合清理的内容用户临时目录下的文件路径通常是C:\Users\用户名\AppData\Local\Temp。系统临时目录路径是C:\Windows\Temp。Windows 更新下载缓存路径是C:\Windows\SoftwareDistribution\Download。回收站内的旧文件。浏览器缓存文件。Windows 缩略图缓存和图标缓存。旧版 Windows 升级残留如C:\Windows.old。各类应用程序运行过程中产生的日志和缓存目录。2.2 不建议直接删除的内容C:\Users\用户名\Documents、Desktop、Pictures等个人数据目录。C:\Program Files和C:\Program Files (x86)下已安装软件的安装目录除非通过软件自带卸载流程。C:\Windows\System32等系统关键目录下的文件。各种开发项目目录下的node_modules这类目录虽然大但删除后需要重新安装依赖不属于“缓存垃圾”。虚拟机磁盘文件、Docker 镜像文件这类文件通常有独立管理方式不建议直接删文件。2.3 合规与安全边界办公电脑清理前先确认是否有公司策略限制。涉及多用户共用电脑时不要清理其他人正在使用的用户目录。删除前建议先统计目录大小确认没有正在被占用。第三方工具只从官网或 GitHub 官方仓库下载不要从下载站拿整合包。3. 环境准备与前置条件清理脚本和本文测试流程都不需要高配置电脑但对运行环境有基本要求。环境项要求操作系统Windows 10 1809 及以上或 Windows 11权限管理员权限部分系统目录清理必须提权PowerShell5.1 或 7.x 均可执行策略允许运行本机脚本可能需要调整 ExecutionPolicy磁盘空间不需要额外安装但清理目标盘至少要保留 1GB 可用空间显卡无特殊要求建议先创建系统还原点或者至少确认关键数据已备份。清理脚本不会动个人文件但稳健操作总是必要的。4. 安装部署与启动方式4.1 方案一Windows 自带磁盘清理命令Windows 自带工具不用安装直接用命令就能启动。# 打开图形界面的磁盘清理 cleanmgr # 指定清理 C 盘 cleanmgr /d C:要注意的是cleanmgr /d C:打开的是图形界面不会直接开始清理。真正要做无人值守清理需要两步先配置清理选项再执行清理。# 第一步把当前清理配置保存为 sagerun:1 cleanmgr /sageset:1 # 第二步静默执行刚才保存的配置 cleanmgr /sagerun:1/sageset:1会弹出磁盘清理设置窗口勾选需要清理的项目点击确定后配置会被保存到注册表。之后每次执行/sagerun:1都会按照刚才的配置自动清理不会弹出任何窗口。这个机制很适合把磁盘清理加入到计划任务。4.2 方案二PowerShell 一键清理脚本我建议把清理逻辑写成一个 PowerShell 脚本命名如Invoke-DiskCleanup.ps1。脚本的核心思路是逐个定位安全可清理的目录统计清理前大小执行删除统计释放空间最后输出报告。下面给出一个基础版的完整脚本框架# Invoke-DiskCleanup.ps1 # 需要以管理员身份运行 $ErrorActionPreference SilentlyContinue # 定义清理目标 $targets ( { Name 用户临时目录; Path $env:TEMP }, { Name 系统临时目录; Path C:\Windows\Temp }, { Name Windows 更新缓存; Path C:\Windows\SoftwareDistribution\Download }, { Name DirectX 着色器缓存; Path $env:LOCALAPPDATA\D3DSCache }, { Name 缩略图缓存; Path $env:LOCALAPPDATA\Microsoft\Windows\Explorer } ) # 统计总释放空间 $totalFreed 0 Write-Host 磁盘清理开始: $(Get-Date) -ForegroundColor Cyan foreach ($item in $targets) { $path $item.Path if (-not (Test-Path $path)) { Write-Host [跳过] $($item.Name) 目录不存在: $path -ForegroundColor Yellow continue } # 统计清理前大小 $sizeBefore (Get-ChildItem -Path $path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum if ($sizeBefore -gt 0) { $sizeBeforeMB [math]::Round($sizeBefore / 1MB, 2) Write-Host [执行] 正在清理: $($item.Name) ($sizeBeforeMB MB) -ForegroundColor Yellow # 执行删除 Get-ChildItem -Path $path -Recurse -Force -ErrorAction SilentlyContinue | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue # 统计清理后大小 $sizeAfter (Get-ChildItem -Path $path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum $freed ($sizeBefore - $sizeAfter) / 1MB $totalFreed $freed Write-Host [完成] $($item.Name) 释放约 $([math]::Round($freed, 2)) MB -ForegroundColor Green } else { Write-Host [跳过] $($item.Name) 已无可清理内容 -ForegroundColor Yellow } } # 清理回收站 Write-Host [执行] 正在清理回收站 -ForegroundColor Yellow Clear-RecycleBin -Force -ErrorAction SilentlyContinue Write-Host 磁盘清理结束: 共释放约 $([math]::Round($totalFreed, 2)) MB -ForegroundColor Green把脚本保存为ps1文件后以管理员身份打开 PowerShell 执行# 如果执行策略阻止脚本运行 Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force # 运行清理脚本 powershell -ExecutionPolicy Bypass -File C:\Scripts\Invoke-DiskCleanup.ps1这套脚本的核心逻辑是“先测大小再删除”每一步都有输出方便确认释放效果。以后做批量维护只需要把脚本拷贝到目标机器上执行就行。4.3 方案三BleachBit 开源工具如果需要图形界面又不想付费买各种管家类软件推荐 BleachBit。它开源、免费、支持 Windows 和 Linux可以在官网或 GitHub 仓库下载便携版解压后直接运行。BleachBit 支持的清理项比 Windows 自带工具多很多能识别 Chrome、Firefox、Edge 的缓存以及各种开发工具的 log 目录。首次启动时勾选清理项点击“清理”即可。它还支持命令行模式# BleachBit 命令行示例 bleachbit_console.exe --clean system.cache system.tmp命令行模式适合批量运维可以脚本化执行。5. 功能测试与效果验证清理脚本写完之后重点不是“看着它运行完”而是要确认三个问题有没有真正释放空间、有没有误删、哪些文件删不掉。5.1 查看磁盘容量变化清理前后各执行一次Get-Volume -DriveLetter C | Select-Object DriveLetter, FileSystemLabel, {NSize(GB);E{[math]::Round($_.Size/1GB,2)}}, {NFreeSpace(GB);E{[math]::Round($_.FreeSpace/1GB,2)}}如果脚本运行完C 盘可用空间没有变化先不要怀疑脚本无效大概率是占用空间的文件不在脚本清理范围里。这时候要用磁盘占用分析工具找到大头。5.2 用 WizTree 找大头目录WizTree 是 Windows 上扫描速度非常快的磁盘占用分析工具软件体积小UI 顶部会按文件大小列出占用排行。正常使用流程是下载并运行 WizTree。选择要分析的磁盘点击扫描。按大小排列文件和目录。确认“大头”是不是在临时目录、更新缓存或浏览器缓存里。如果在用前面脚本清理如果不在要人工判断是否可删。这里要强调WizTree 是分析工具不是清理工具。找到大目录之后要像前面脚本一样先确认路径性质再决定删除方式。5.3 验证磁盘清理命令是否生效如果用cleanmgr /sageset:1cleanmgr /sagerun:1方案验证方式如下# 查看 Windows 更新缓存目录当前大小 $updateCache C:\Windows\SoftwareDistribution\Download if (Test-Path $updateCache) { $size (Get-ChildItem -Path $updateCache -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum {0:N2} MB -f ($size / 1MB) }执行cleanmgr /sagerun:1后再看同一目录数字明显变小就说明生效。如果没有任何变化可能是对应的清理项没有被勾选。5.4 典型验证结果在一台正常使用三个月以上的 Windows 11 机器上执行本文的 PowerShell 清理脚本常见的释放范围是几个 GB 到十几个 GB。临时目录、Windows 更新缓存和缩略图缓存通常能释放 2GB 到 5GB如果系统升级残留Windows.old存在释放空间甚至可以到 20GB 以上。这里不写死具体数字因为实际释放量和系统使用时间、更新频率、应用习惯强相关。一台从不清理的电脑首次清理效果会非常明显定期清理的电脑释放空间会逐渐趋近于零。6. 接口 API 与批量任务官方说明本文三种方案都是本地清理工具不涉及 HTTP API 服务。如果你需要把清理能力集成到自己的运维系统里可以从“命令行接口”这个角度理解调用方式。6.1 用计划任务实现定时清理不需要在自己写的程序里调用Windows 任务计划程序本身就支持定时执行。# 创建一个每天中午 12 点执行的清理任务示例 $action New-ScheduledTaskAction -Execute powershell.exe -Argument -ExecutionPolicy Bypass -File C:\Scripts\Invoke-DiskCleanup.ps1 $trigger New-ScheduledTaskTrigger -Daily -At 12:00 $principal New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName Daily Disk Cleanup -Action $action -Trigger $trigger -Principal $principal -Force这个任务会用 SYSTEM 账户运行权限足够清理系统临时目录。创建后可以在任务计划程序库中看到任务状态。6.2 批量清理多台电脑对于需要维护多台电脑的场景可以写一个简单的远程执行脚本# 远程批量执行清理示例需要提前配置 WinRM $computers (PC-01, PC-02, PC-03) foreach ($computer in $computers) { try { Invoke-Command -ComputerName $computer -ScriptBlock { powershell -ExecutionPolicy Bypass -File C:\Scripts\Invoke-DiskCleanup.ps1 } -Credential (Get-Credential) Write-Host $computer 清理完成 -ForegroundColor Green } catch { Write-Host $computer 清理失败: $($_.Exception.Message) -ForegroundColor Red } }远程批量执行前要确认 WinRM 服务状态、防火墙策略和目标机上脚本路径可用。如果没有配置域环境建议先用Test-WSMan检查目标机器连通性。Test-WSMan -ComputerName PC-016.3 给团队做“一键清理.bat”如果你不是运维只是帮同事做一次清理用以下批处理更方便echo off :: OneClickClean.bat :: 需要以管理员身份运行 echo echo OneClick Disk Cleanup echo echo [1/4] Clean user temp... del /f /s /q %TEMP%\*.* nul 21 echo [2/4] Clean system temp... del /f /s /q C:\Windows\Temp\*.* nul 21 echo [3/4] Clean Windows Update cache... del /f /s /q C:\Windows\SoftwareDistribution\Download\*.* nul 21 echo [4/4] Clean recycle bin... rd /s /q C:\$Recycle.Bin nul 21 echo. echo All done. Press any key to exit. pause nul这个 bat 文件可以直接 U 盘拷贝使用双击后按提示操作。干净、直接不会有捆绑软件问题。7. 资源占用与性能观察磁盘清理工具自身对资源占用很低但在实际运行时有几个观察点值得注意。7.1 清理脚本的资源占用执行 PowerShell 清理脚本时主要消耗来自Get-ChildItem -Recurse遍历大目录和Remove-Item删除大量文件。在大目录上CPU 占用会短暂升高磁盘 I/O 活动明显但整机通常不会卡顿。如果遇到系统盘是机械硬盘删除几十万个小文件可能需要较长时间这是硬盘随机读写性能决定的。建议观察方式清理时打开任务管理器查看磁盘活动百分比。PowerShell 遍历目录阶段磁盘占用会到 100%这是正常现象删除阶段波动较大结束后恢复平稳。7.2 系统自带 cleanmgr 的资源占用cleanmgr在执行扫描时会短暂占用较高 CPU扫描进度条走完后进入删除阶段时占用回落。由于cleanmgr /sagerun是静默运行建议通过任务管理器确认进程处于运行状态不要误以为卡死。7.3 清理对整机性能的影响磁盘剩余空间长期低于 10% 时Windows 运行会变慢主要原因是页面文件、临时文件写入空间不足以及系统无法有效进行磁盘碎片整理。清理后可用空间回到 20% 以上系统响应会恢复。注意观察的是 Windows 更新能否正常进行。7.4 如何观察清理后的磁盘性能# 查看磁盘剩余空间历史变化简单直观 Get-PSDrive C | Select-Object {NUsed(GB);E{[math]::Round($_.Used/1GB,2)}}, {NFree(GB);E{[math]::Round($_.Free/1GB,2)}}日常维护时也不用反复跑大脚本。建议先跑一次记录释放量之后每周跑一次增量清理就行了。8. 常见问题与排查方法磁盘清理遇到的问题非常固定这里整理了一份排查表。问题现象可能原因排查方式解决方案清理脚本提示“拒绝访问”未以管理员身份运行查看 PowerShell 是否以管理员启动右键 PowerShell选择“以管理员身份运行”Temp 目录内部分文件删不掉文件正被系统或程序占用查看报错文件名与进程不强制处理跳过即可重启后重试cleanmgr /sagerun 没有任何效果配置里未勾选清理项重新运行 cleanmgr /sageset:1 检查勾选状态勾选需要的清理类别后再执行C 盘清理后可用空间变化很小大头文件不在临时目录中用 WizTree 扫描磁盘分析根据分析结果处理超大型文件Windows 更新缓存清理失败SoftwareDistribution 服务正在运行检查 Windows Update 服务状态可先停服务再清理随后重启服务执行策略阻止脚本运行PowerShell ExecutionPolicy 限制查看 Get-ExecutionPolicy 状态临时使用 -ExecutionPolicy Bypass回收站无法清空回收站文件被占用或已损坏查看回收站是否有单独损坏项使用 rd /s /q C:$Recycle.Bin 后重建磁盘清理工具扫描很慢需要扫描的文件数量极大观察磁盘活动等待完成或先终止再用 PowerShell 定向清理清理后系统启动变慢缩略图缓存、图标缓存被清空后需要重建观察是否只是首次启动慢正常现象重启后缓存自动生成Windows.old 目录无法删除目录受系统权限保护查看磁盘清理中“以前的 Windows 安装”项使用系统自带磁盘清理勾选该项处理8.1 处理文件被占用的问题清理时最常见的报错就是“文件正在被使用”。遇到这种情况先看哪个程序在占用关掉对应程序再清理。如果无法定位可以短暂重启再执行清理不要强行结束系统进程。8.2 处理 system32 目录下的文件清理脚本只应该处理Temp、SoftwareDistribution\Download这类明确安全的目录。如果在分析过程中发现某个大目录位于System32下不要用第三方工具强行删除风险极大。正确做法是先搜索该目录用途再决定处理方案。8.3 如何判断清理是否误删最直接的方法是看脚本输出。每个清理项都记录了目录名称、清理前大小和释放空间。如果你担心某个目录被误删可以在目标目录被清理前自行备份到其他位置。从脚本设计来看所有路径都是 Windows 标准缓存目录不存在用户个人文件。9. 最佳实践与使用建议9.1 先分析再清理任何磁盘清理开始前先做离线分析。这个习惯能避免大量无效操作。磁盘占用分析时间成本极低WizTree 扫完一个 1TB 硬盘通常只需要几十秒远低于猜路径删文件的成本。9.2 保持一套最小可运行清理脚本不要在维护机器时临时敲命令。建议维护一套固定脚本放在统一的工具目录例如C:\Scripts\DiskCleanup。脚本内容尽量只包含“安全目录”让输出结果可读。维护多个机器时固定脚本能保证行为一致。9.3 定期维护而不是等满了再处理磁盘空间报警后再清理往往只能解决眼前的更新或安装需求。比较合理的频率是每月做一次临时文件和更新缓存清理每季度做一次完整磁盘分析确认是否有大型文件持续增长。9.4 清理工具只用来源可靠的Windows 自带工具、PowerShell 脚本、BleachBit、WizTree这些都是公开渠道能获取的方案。避免从下载站下载“优化大师”“清理助手”类软件这类软件中最坏的情况可能包含推广绑定甚至恶意行为。命令行方案可控性更强适合技术维护场景。9.5 给关键目录加保护在 PowerShell 清理脚本中加入排除项防止误伤重要目录# 在 Remove-Item 前增加判断跳过指定关键目录 $excludePaths ( $env:USERPROFILE\Documents, $env:USERPROFILE\Desktop, $env:USERPROFILE\Downloads ) foreach ($path in $targets) { # 如果目标路径在排除列表中则跳过 if ($excludePaths -contains $path.Path) { Write-Host [保护] 跳过排除目录: $($path.Path) -ForegroundColor Magenta continue } # 实际清理逻辑... }9.6 数据备份和恢复如果清理前没有做系统还原点而清理后又出现异常可以先尝试通过 Windows 的“系统还原”恢复到清理前的状态。这要求机器开启了系统保护功能。运维场景中建议把系统还原点创建也加入清理脚本成本极低收益很高。10. 总结与下一步这个“一键清理”主题真正值得收藏的地方在于它不依赖任何付费工具也不用装各种管家软件。Windows 自带磁盘清理加一个 PowerShell 脚本已经能处理 90% 的临时文件和缓存问题遇到占比不明确的大型目录用 WizTree 几分钟就能定位。如果你的电脑 C 盘已经爆红先执行cleanmgr /sageset:1手动勾选一次清理项目然后跑cleanmgr /sagerun:1。如果临时目录和更新缓存已经清理过还是不够用直接用 WizTree 扫描按照空间占用排行去处理这是最快的路径。最容易踩的坑有两个一是没有用管理员权限运行脚本清理一半报错二是删除前不确认路径把不该删的文件顺手带走。保持先分析、再备份、后清理的顺序这套流程足够稳定。下一步可以考虑把清理脚本接到 Windows 计划任务里每周定时跑一次或者把相同思路改写成 Linux 下的 bash 清理脚本用在服务器 temp 目录和包管理器缓存上。清理工具永远不嫌多关键是你得有一套自己能完全控制的方案。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻