Windows C盘空间优化教程
本教程包含完整的C盘空间优化方案,从诊断到清理,安全释放大量磁盘空间。
目录
1. 诊断分析
1.1 使用可视化工具
下载 WizTree 或 SpaceSniffer 进行可视化分析,快速定位大文件。
1.2 使用命令行分析
运行以下 PowerShell 脚本查看 C 盘空间分布:
# 检查C盘总体使用情况
$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"
$free = [math]::Round($disk.FreeSpace/1GB, 1)
$total = [math]::Round($disk.Size/1GB, 0)
$used = $total - $free
Write-Host "C盘总容量: $total GB"
Write-Host "已用: $used GB"
Write-Host "剩余: $free GB"
# 检查C盘根目录各大文件夹
$paths = @(
"C:\Users",
"C:\Program Files",
"C:\Program Files (x86)",
"C:\Windows"
)
foreach ($p in $paths) {
if (Test-Path $p) {
$size = (Get-ChildItem $p -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum
if ($size -and $size -gt 0) {
$gb = [math]::Round($size/1GB, 2)
Write-Host "$p : $gb GB"
}
}
}
# 分析AppData详细占用
$localSize = (Get-ChildItem "C:\Users\$env:USERNAME\AppData\Local" -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum
$roamingSize = (Get-ChildItem "C:\Users\$env:USERNAME\AppData\Roaming" -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum
$localSizeGb = [math]::Round($localSize/1GB, 2)
$roamingSizeGb = [math]::Round($roamingSize/1GB, 2)
Write-Host "AppData\Local: $localSizeGb GB"
Write-Host "AppData\Roaming: $roamingSizeGb GB"
1.3 查看AppData下的大文件夹
# 查看AppData\Local下最大的15个文件夹
Get-ChildItem "C:\Users\$env:USERNAME\AppData\Local" -ErrorAction SilentlyContinue |
Where-Object { $_.PSIsContainer } |
Select-Object Name, @{N='SizeGB';E={[math]::Round((Get-ChildItem $_.FullName -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum/1GB, 2)}} |
Sort-Object SizeGB -Descending |
Select-Object -First 15
2. 自动清理脚本
将以下内容保存为 cleanup.ps1,以管理员身份运行:
# ==========================================
# C盘清理脚本 - 安全清理临时文件与缓存
# 以管理员身份运行
# ==========================================
Write-Host "=========================================="
Write-Host "C Drive Cleanup Script"
Write-Host "=========================================="
# 1. 清理用户临时文件 (通常可释放 3-6 GB)
Write-Host "[1/6] Cleaning user Temp..."
$userTemp = "C:\Users\$env:USERNAME\AppData\Local\Temp"
if (Test-Path $userTemp) {
Get-ChildItem $userTemp -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Write-Host " [OK] Temp cleaned"
}
# 2. 清理npm缓存 (通常可释放 1-2 GB)
Write-Host "[2/6] Cleaning npm cache..."
$npmCache = "C:\Users\$env:USERNAME\AppData\Local\npm-cache"
if (Test-Path $npmCache) {
npm cache clean --force 2>$null
Get-ChildItem $npmCache -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Write-Host " [OK] npm cache cleaned"
}
# 3. 清理pip缓存
Write-Host "[3/6] Cleaning pip cache..."
pip cache purge 2>$null
$pipCache = "C:\Users\$env:USERNAME\AppData\Local\pip"
if (Test-Path $pipCache) {
Get-ChildItem $pipCache -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Write-Host " [OK] pip cache cleaned"
}
# 4. 清理浏览器缓存 (Edge/Chrome)
Write-Host "[4/6] Cleaning browser caches..."
$paths = @(
"C:\Users\$env:USERNAME\AppData\Local\Microsoft\Edge\User Data\Default\Cache",
"C:\Users\$env:USERNAME\AppData\Local\Google\Chrome\User Data\Default\Cache",
"C:\Users\$env:USERNAME\AppData\Local\Microsoft\Windows\INetCache"
)
foreach ($p in $paths) {
if (Test-Path $p) {
Get-ChildItem $p -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
Write-Host " [OK] $p cleaned"
}
}
# 5. 清理回收站
Write-Host "[5/6] Cleaning Recycle Bin..."
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
Write-Host " [OK] Recycle Bin cleaned"
# 6. 显示结果
Write-Host "[6/6] Checking C drive..."
$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"
$free = [math]::Round($disk.FreeSpace/1GB, 1)
$total = [math]::Round($disk.Size/1GB, 0)
$used = $total - $free
$usedPct = [math]::Round(($used / $total) * 100, 1)
Write-Host ""
Write-Host "=========================================="
Write-Host "C Drive Status"
Write-Host "=========================================="
Write-Host "Total: $total GB"
Write-Host "Used: $used GB ($usedPct%)"
Write-Host "Free: $free GB"
Write-Host "=========================================="
运行方式:
# 方法1:直接在PowerShell中执行
powershell -NoProfile -ExecutionPolicy Bypass -File "C:\path\to\cleanup.ps1"
# 方法2:逐条执行
# 先清理Temp
Remove-Item "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
# 清理npm
npm cache clean --force
Remove-Item "$env:LOCALAPPDATA\npm-cache\*" -Recurse -Force -ErrorAction SilentlyContinue
# 清空回收站
Clear-RecycleBin -Force
3. WSL与Docker清理
3.1 查看WSL状态
wsl --list --verbose
3.2 注销WSL分发 (如果不再使用)
# 查看所有WSL分发
wsl --list --all
# 注销特定分发 (例如Ubuntu)
wsl --unregister Ubuntu
# 注销Docker Desktop WSL(如果存在)
wsl --unregister docker-desktop
# 确认已注销
wsl --list --verbose
3.3 删除WSL虚拟磁盘文件
# 检查并删除WSL的VHDX虚拟磁盘文件
Get-ChildItem "$env:LOCALAPPDATA\Packages" -Filter "*.vhdx" -Recurse -ErrorAction SilentlyContinue |
ForEach-Object {
Write-Host "Found: $($_.FullName) - $([math]::Round($_.Length/1GB,2)) GB"
Remove-Item $_.FullName -Force
Write-Host "Deleted"
}
3.4 删除Docker数据
# 如果不再使用Docker Desktop
Remove-Item "$env:LOCALAPPDATA\Docker" -Recurse -Force
# 建议完全卸载Docker Desktop
# 控制面板 → 程序和功能 → Docker Desktop → 卸载
3.5 可选:完全禁用WSL功能
# 以管理员身份运行
dism /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux
4. 系统级清理
4.1 使用Windows内置磁盘清理
# 打开磁盘清理工具 (带高级选项)
cleanmgr /sageset:1
# 运行上述配置的清理
cleanmgr /sagerun:1
4.2 清理WinSxS组件存储 (管理员)
# 分析可清理空间
dism /online /cleanup-image /AnalyzeComponentStore
# 清理WinSxS (安全,不会影响系统功能)
dism /online /cleanup-image /StartComponentCleanup
# 强制清理(删除所有旧版本组件,不可回退)
dism /online /cleanup-image /StartComponentCleanup /ResetBase
4.3 清理Windows更新缓存
# 停止更新服务
Stop-Service wuauserv -Force
Stop-Service bits -Force
# 删除更新下载缓存
Remove-Item "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force
# 重启更新服务
Start-Service wuauserv
Start-Service bits
4.4 清理系统还原点 (保留最新一个)
# 查看现有还原点
Get-ComputerRestorePoint
# 删除指定还原点
# Remove-ComputerRestorePoint -RestorePoint <SequenceNumber>
4.5 关闭休眠 (可释放 ~16GB)
# 以管理员身份运行
powercfg -h off
4.6 清理DriverStore旧驱动
# 查看所有第三方驱动
dism /online /Get-Drivers
# 删除指定驱动(谨慎操作,只删除确定不需要的)
# pnputil /delete-driver oem#.inf /uninstall
5. 应用迁移
5.1 卸载不需要的Windows Store应用
打开 设置 → 应用 → 应用和功能,卸载不使用的应用。
Packages 目录(AppData\Local\Packages)通常可释放 10-15 GB。
5.2 将大型应用迁移到D盘
重新安装以下常见应用时选择D盘:
- 飞书 / 钉钉 / 企业微信
- 豆包 / 金山办公
- 夸克网盘 / 百度网盘
5.3 迁移微信/QQ文件存储
微信:
- 打开微信 → 设置 → 文件管理
- 将文件保存路径改为
D:\WeChat Files
QQ:
- 打开QQ → 设置 → 文件管理
- 将文件保存路径改为
D:\QQ Files
5.4 移动虚拟内存到D盘
- 右键"此电脑" → 属性 → 高级系统设置
- 性能 → 设置 → 高级 → 虚拟内存 → 更改
- 取消勾选"自动管理"
- 选择C盘 → 设置"无分页文件" → 点击"设置"
- 选择D盘 → 设置"系统管理的大小" → 点击"设置"
- 确定 → 重启
6. 长期维护
6.1 启用存储感知
设置 → 系统 → 存储 → 打开"存储感知" 配置为自动清理临时文件和回收站。
6.2 定期清理脚本
创建一个计划任务,每月自动运行清理脚本:
- 打开 任务计划程序
- 创建基本任务 → 设置触发器为每月
- 操作 → 启动程序 → 程序填
powershell.exe - 参数填:
-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\cleanup.ps1"
6.3 养成良好习惯
- 将大文件保存在D盘
- 安装新软件时选择自定义安装 → D盘
- 定期清空回收站
- 使用浏览器清理功能定期清理缓存
附录:实际案例效果
在一个实际优化案例中:
- 优化前:C盘200GB,已用170.4GB,剩余29.6GB(85%使用率)
- 优化后:C盘200GB,已用138.9GB,剩余61.1GB(70%使用率)
- 释放空间:31.5 GB
主要释放来源:
| 项目 | 释放空间 |
|---|---|
| WSL Ubuntu分发注销 | ~10 GB |
| Docker数据删除 | 9.49 GB |
| Temp临时文件 | ~5.5 GB |
| npm缓存 | ~1.8 GB |
| 浏览器缓存 + 回收站 | ~0.5 GB |
| 其他 | ~4 GB |
Description
Languages
PowerShell
100%