2026-07-15 22:38:59 +08:00
2026-07-15 22:38:59 +08:00
2026-07-15 22:38:59 +08:00

Windows C盘空间优化教程

本教程包含完整的C盘空间优化方案从诊断到清理安全释放大量磁盘空间。


目录

  1. 诊断分析
  2. 自动清理脚本
  3. WSL与Docker清理
  4. 系统级清理
  5. 应用迁移
  6. 长期维护

1. 诊断分析

1.1 使用可视化工具

下载 WizTreeSpaceSniffer 进行可视化分析,快速定位大文件。

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文件存储

微信:

  1. 打开微信 → 设置 → 文件管理
  2. 将文件保存路径改为 D:\WeChat Files

QQ

  1. 打开QQ → 设置 → 文件管理
  2. 将文件保存路径改为 D:\QQ Files

5.4 移动虚拟内存到D盘

  1. 右键"此电脑" → 属性 → 高级系统设置
  2. 性能 → 设置 → 高级 → 虚拟内存 → 更改
  3. 取消勾选"自动管理"
  4. 选择C盘 → 设置"无分页文件" → 点击"设置"
  5. 选择D盘 → 设置"系统管理的大小" → 点击"设置"
  6. 确定 → 重启

6. 长期维护

6.1 启用存储感知

设置 → 系统 → 存储 → 打开"存储感知" 配置为自动清理临时文件和回收站。

6.2 定期清理脚本

创建一个计划任务,每月自动运行清理脚本:

  1. 打开 任务计划程序
  2. 创建基本任务 → 设置触发器为每月
  3. 操作 → 启动程序 → 程序填 powershell.exe
  4. 参数填:-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\cleanup.ps1"

6.3 养成良好习惯

  • 将大文件保存在D盘
  • 安装新软件时选择自定义安装 → D盘
  • 定期清空回收站
  • 使用浏览器清理功能定期清理缓存

附录:实际案例效果

在一个实际优化案例中:

  • 优化前C盘200GB已用170.4GB剩余29.6GB85%使用率)
  • 优化后C盘200GB已用138.9GB剩余61.1GB70%使用率)
  • 释放空间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
No description provided
Readme 28 KiB
Languages
PowerShell 100%