问题背景
作为一名程序员,我的个人电脑C盘空间突然爆红,可用空间仅剩50GB左右,严重影响系统性能和日常使用。为了解决这个问题,我决定深入系统底层,使用原生工具进行全面排查,找出隐藏的空间黑洞并制定有效的清理策略。
排查工具与方法
在本次排查中,我主要使用了以下工具:
| 工具 | 用途 | 优势 |
|---|---|---|
| PowerShell | 复杂数据处理和系统管理 | 强大的递归和管道处理能力 |
| CMD | 查看隐藏系统文件 | 对系统文件的访问权限更高 |
| 系统自带工具 | 如磁盘清理、存储感知 | 安全可靠,操作简单 |
PowerShell命令详解
PowerShell是Windows系统中功能强大的命令行工具,特别适合用于磁盘空间分析和管理。以下是本次排查中使用的核心PowerShell命令详解:
1. 磁盘空间基础信息查询
# 查看C盘空间基本信息
Get-Volume C | Select-Object Size, SizeRemaining, @{N="UsedGB";E={[math]::Round(($_.Size - $_.SizeRemaining)/1GB,2)}}, @{N="FreeGB";E={[math]::Round($_.SizeRemaining/1GB,2)}}
# 使用fsutil命令查看更详细的磁盘空间信息
fsutil volume diskFree C:
2. 目录大小统计
# 递归统计C盘根目录下各文件夹的真实大小
Get-ChildItem C:\ -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Folder = $_.Name
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Format-Table -AutoSize
3. 大文件快速扫描
# 查找大于 1GB 的文件
Get-ChildItem C:\ -Recurse -File -ErrorAction SilentlyContinue |
Where-Object {$_.Length -gt 1GB} |
Select-Object FullName, @{N="SizeGB";E={[math]::Round($_.Length/1GB,2)}} |
Sort-Object SizeGB -Descending
# 查找大于 500MB 的文件(更详细)
Get-ChildItem C:\ -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object {!$_.PSIsContainer -and $_.Length -gt 500MB} |
Select-Object FullName, @{N="SizeGB";E={[math]::Round($_.Length/1GB,2)}} |
Sort-Object SizeGB -Descending |
Select-Object -First 20
4. 系统文件分析
# 查看虚拟内存使用情况
Get-WmiObject -Class Win32_PageFileUsage | ForEach-Object {
[PSCustomObject]@{
路径 = $_.Name
当前大小_MB = $_.AllocatedBaseSize
当前使用率 = "$([math]::Round($_.CurrentUsage / $_.AllocatedBaseSize * 100, 2))%"
峰值使用_MB = $_.PeakUsage
}
}
# 查看Windows更新缓存大小
(Get-ChildItem C:\Windows\SoftwareDistribution -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
# 查看WinSxS组件存储大小
(Get-ChildItem C:\Windows\WinSxS -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
5. 临时文件分析
# 检查用户临时文件大小
(Get-ChildItem $env:TEMP -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
# 检查系统临时文件大小
(Get-ChildItem C:\Windows\Temp -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
6. 卷影副本分析
# 查看卷影副本占用的空间
vssadmin list shadowstorage
详细排查过程
第一步:用户账户与基本情况分析
首先,我需要了解系统中的用户账户情况,确认是否存在多用户导致的空间占用:
# 列出所有本地用户账户
Get-LocalUser | Select-Object Name, Enabled, LastLogon
# 或者通过用户目录查看实际使用的用户
Get-ChildItem C:\Users -Directory | Select-Object Name
用户账户结果:
- 主要用户:liuxin
- 公共用户:Public
接下来,查看C盘的总体使用情况:
# 查看C盘空间基本信息
Get-Volume C | Select-Object Size, SizeRemaining, @{N="UsedGB";E={[math]::Round(($_.Size - $_.SizeRemaining)/1GB,2)}}, @{N="FreeGB";E={[math]::Round($_.SizeRemaining/1GB,2)}}
初始结果:
- 总容量:237.8GB
- 已用空间:186.6GB
- 剩余空间:51.2GB
第二步:根目录空间占用分析
# 递归统计C盘根目录下各文件夹的真实大小
Get-ChildItem C:\ -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Folder = $_.Name
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Format-Table -AutoSize
分析结果:
- Users: 31.7GB
- Windows: 31.43GB
- Program Files (x86): 20.04GB
- Program Files: 16.98GB
- inetpub: 0GB
- PerfLogs: 0GB
排查误区:大小对不上的问题
发现问题:通过上述命令统计的总大小约100GB,与fsutil显示的181.6GB已用空间相比,存在约80GB的差异。
原因分析:
- 权限限制:
ErrorAction SilentlyContinue会跳过权限不足的文件,导致部分系统文件未被统计 - 隐藏系统文件:如
hiberfil.sys、pagefile.sys等大型系统文件可能未被包含 - 硬链接和 Junction:Windows 中的硬链接和 Junction 点可能导致重复计算或遗漏
第三步:系统隐藏文件分析
通过CMD命令查看隐藏的系统文件(PowerShell在某些情况下无法访问这些文件):
# 查看C盘根目录下的隐藏文件(按大小排序)
cmd /c "dir C:\ /a:h /-c /o-s" | Select-Object -First 10
关键发现:
- pagefile.sys: 约18.19GB(虚拟内存文件)
- hiberfil.sys: 约6.29GB(休眠文件)
- swapfile.sys: 约0.02GB(现代Windows交换文件)
PowerShell访问测试:
# 尝试通过PowerShell访问这些文件
if (Test-Path "C:\hiberfil.sys") { (Get-Item "C:\hiberfil.sys").Length / 1GB } else { "hiberfil.sys不存在" }
if (Test-Path "C:\swapfile.sys") { (Get-Item "C:\swapfile.sys").Length / 1GB } else { "swapfile.sys不存在" }
测试结果:
- hiberfil.sys不存在
- swapfile.sys不存在
权限问题解释:这是因为这些系统文件受到Windows保护,即使它们实际存在,PowerShell的Test-Path命令在某些情况下也无法访问它们。而CMD的dir命令由于运行在管理员模式下,能够看到这些文件。
第四步:虚拟内存详细分析
# 查看页面文件详细配置
wmic pagefile list /format:list
输出结果:
- AllocatedBaseSize=18631(分配大小,约18GB)
- CurrentUsage=1180(当前使用,约1.15GB)
- PeakUsage=3879(峰值使用,约3.8GB)
- Description=C:\pagefile.sys
- TempPageFile=FALSE(非临时页面文件)
分析:虽然分配了18GB的虚拟内存,但实际使用量很小,有优化空间。
第五步:用户目录深度分析
# 查看Users目录下具体用户的大小
Get-ChildItem C:\Users -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB;
[PSCustomObject]@{
UserFolder = $_.Name;
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending
# 查看用户AppData目录大小(常见的空间占用大户)
Get-ChildItem C:\Users | ForEach-Object {
$appDataPath = Join-Path $_.FullName "AppData"
if (Test-Path $appDataPath) {
$size = (Get-ChildItem $appDataPath -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
User = $_.Name
AppDataSizeGB = [math]::Round($size, 2)
}
}
} | Sort-Object AppDataSizeGB -Descending | Format-Table -AutoSize
# 当前用户AppData大小详细分析
"Local: $([math]::Round((Get-ChildItem $env:LOCALAPPDATA -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)) GB, Roaming: $([math]::Round((Get-ChildItem $env:APPDATA -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)) GB"
重要发现:
- 主用户目录大小仅28.21GB,但AppData目录却高达40.95GB
- 这说明权限限制导致大量系统文件未被统计,统计结果存在严重误差
第六步:AppData目录详细分析
# 查看AppData目录下各子目录大小
Get-ChildItem C:\Users\liuxin\AppData -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Folder = $_.Name
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Format-Table -AutoSize
# 1. Local AppData 明细(重点!)
Get-ChildItem $env:LOCALAPPDATA -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB;
[PSCustomObject]@{
Folder = $_.Name;
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Select-Object -First 15
# 2. Roaming AppData 明细
Get-ChildItem $env:APPDATA -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB;
[PSCustomObject]@{
Folder = $_.Name;
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Select-Object -First 10
# 查看Kingsoft内部结构(WPS常见缓存占用)
Get-ChildItem "$env:LOCALAPPDATA\Kingsoft" -Directory -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
if ($size -gt 0.1) {
[PSCustomObject]@{
Folder = $_.FullName.Replace("$env:LOCALAPPDATA\Kingsoft", "")
SizeGB = [math]::Round($size, 2)
}
}
} | Sort-Object SizeGB -Descending
分析结果:
- Local: 25.93GB
- Roaming: 14.87GB
- LocalLow: 0.15GB
第七步:用户文档详细分析
# 查看用户目录下各文件夹大小
Get-ChildItem C:\Users\liuxin -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Folder = $_.Name
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Format-Table -AutoSize
# 查看Documents目录下的大型文件
Get-ChildItem "C:\Users\liuxin\Documents" -Recurse -File -ErrorAction SilentlyContinue |
Where-Object {$_.Length -gt 100MB} |
Select-Object FullName, @{N="SizeMB";E={[math]::Round($_.Length/1MB,2)}} |
Sort-Object SizeMB -Descending | Format-Table -AutoSize
# 检查桌面总大小
$desktop = "$env:USERPROFILE\Desktop"
$deskSize = [math]::Round((Get-ChildItem $desktop -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)
Write-Host "桌面总大小: $deskSize GB" -ForegroundColor Yellow
分析结果:
- Documents: 13.25GB
- Desktop: 6.95GB
- xwechat_files: 5.76GB(后续发现此目录不存在,可能是临时目录)
- .vscode: 1.31GB
- .m2: 0.52GB
- .dotnet: 0.11GB
第八步:Windows目录详细分析
# 查看Windows目录下各子目录大小
Get-ChildItem C:\Windows -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Folder = $_.Name
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Select-Object -First 10 | Format-Table -AutoSize
# 查看WinSxS组件存储大小
(Get-ChildItem C:\Windows\WinSxS -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
# Windows 日志大小
(Get-ChildItem C:\Windows\Logs -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
分析结果:
- WinSxS: 13.48GB
- System32: 11.02GB
- Microsoft.NET: 1.9GB
- SysWOW64: 1.2GB
- SystemApps: 1.18GB
第九步:Windows更新缓存检查
# 查看Windows更新缓存大小
(Get-ChildItem C:\Windows\SoftwareDistribution -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
结果:0.07 GB(很小,无需清理)
空间占用汇总分析
主要空间占用来源
| 类别 | 大小 | 占比 |
|---|---|---|
| 系统隐藏文件 | 24.5GB | 13.5% |
| AppData目录 | 40.95GB | 22.6% |
| 用户文档 | 27.81GB | 15.3% |
| Windows目录 | 29.86GB | 16.4% |
| 其他系统目录 | 36.27GB | 20.0% |
| 未统计空间 | 22.2GB | 12.2% |
| 总计 | 181.6GB | 100% |
未统计空间分析
未统计空间(22.2GB) 的可能来源包括:
- 权限限制:部分系统文件受Windows保护,即使以管理员身份运行PowerShell也无法访问
- 系统还原点和卷影副本:Windows创建的系统还原点和卷影副本可能占用大量空间
- 硬链接和Junction点:Windows系统中的硬链接和Junction点可能导致文件被重复计算或遗漏
- Windows系统文件的特殊属性:某些系统文件具有特殊属性,导致无法通过常规方法统计
- MSIX应用包存储:Windows 10/11中的MSIX应用包存储可能占用空间
- 系统日志和诊断数据:Windows系统生成的日志和诊断数据
- WSL(Windows Subsystem for Linux) :如果启用了WSL,可能会占用额外空间
- 虚拟内存文件的动态变化:页面文件大小可能会动态变化,导致统计误差
进一步排查建议
如果您想进一步排查这部分未统计空间,可以尝试以下方法:
-
使用管理员权限运行命令:
- 以管理员身份打开CMD,运行
vssadmin list shadowstorage /for=C:查看卷影副本存储使用情况 - 运行
vssadmin list shadows /for=C:查看系统还原点占用空间
- 以管理员身份打开CMD,运行
-
检查系统还原设置:
- 右键点击"此电脑" → 属性 → 系统保护 → 配置
- 查看系统还原点的使用空间,并考虑调整大小或删除旧的还原点
-
检查WSL存储:
- 如果您启用了WSL,运行
wsl --list --verbose查看已安装的分发版 - 考虑清理WSL分发版的空间或删除不使用的分发版
- 如果您启用了WSL,运行
-
使用第三方工具:
- 可以使用如SpaceSniffer、TreeSize等第三方工具来可视化分析磁盘空间占用
- 这些工具通常具有更高的权限和更强大的扫描能力,可能能检测到更多的空间占用源
优化建议
对于未统计空间的优化,您可以:
- 清理系统还原点:删除旧的系统还原点,只保留最近的一个
- 禁用或限制卷影副本:如果不需要卷影副本功能,可以考虑禁用或限制其大小
- 清理WSL存储:如果使用WSL,定期清理WSL分发版的空间或删除不使用的分发版
- 优化系统日志:设置系统日志的最大大小,避免日志文件过大
- 定期运行磁盘清理:使用Windows自带的磁盘清理工具,勾选"系统还原和卷影副本"选项
关键发现
- 权限黑洞:AppData目录大小(40.95GB)大于整个用户目录大小(28.21GB),说明权限限制导致大量文件未被统计
- 系统文件:虚拟内存文件(pagefile.sys)和休眠文件(hiberfil.sys)占用了约24.5GB
- 应用缓存:AppData目录中的缓存文件是最大的空间占用源,其中Local占25.93GB,Roaming占14.87GB
- 用户文件:Documents(13.25GB)和Desktop(6.95GB)目录存储了大量个人文件
- 系统组件:WinSxS(13.48GB)和System32(11.02GB)是Windows目录中的主要空间占用者
优化策略与执行
高优先级清理项
-
清理微信文件
# 查看微信文件大小 (Get-ChildItem "C:\Users\liuxin\Documents\WeChat Files" -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB # 删除微信文件 Remove-Item "C:\Users\liuxin\Documents\WeChat Files" -Recurse -Force -ErrorAction SilentlyContinue -
清理应用程序缓存
# 清理Edge浏览器缓存 Remove-Item "C:\Users\liuxin\AppData\Local\Microsoft\Edge\User Data\Default\Cache*" -Recurse -Force -ErrorAction SilentlyContinue # 清理Postman缓存 Remove-Item "C:\Users\liuxin\AppData\Local\Postman*" -Recurse -Force -ErrorAction SilentlyContinue # 清理npm缓存 Remove-Item "C:\Users\liuxin\AppData\Local\npm-cache*" -Recurse -Force -ErrorAction SilentlyContinue -
清理WPS旧版本
# 查看并删除WPS旧版本 $oldWpsVersion = "$env:LOCALAPPDATA\Kingsoft\WPS Office\12.1.0.24657" if (Test-Path $oldWpsVersion) { $size = (Get-ChildItem $oldWpsVersion -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB Write-Host "旧版本 WPS (12.1.0.24657) 大小: $([math]::Round($size, 2)) GB" -ForegroundColor Yellow # 删除旧版本 Remove-Item $oldWpsVersion -Force -Recurse -ErrorAction SilentlyContinue if (-not (Test-Path $oldWpsVersion)) { Write-Host "旧版本 WPS 已删除,释放 $([math]::Round($size, 2)) GB" -ForegroundColor Green } } -
系统组件清理
# 执行组件存储清理 Dism.exe /Online /Cleanup-Image /StartComponentCleanup
中优先级优化项
-
优化虚拟内存
-
操作步骤:
- 打开系统属性设置:
SystemPropertiesAdvanced - 在"高级"选项卡中点击"性能"下的"设置"
- 在"高级"选项卡中点击"虚拟内存"下的"更改"
- 取消勾选"自动管理所有驱动器的分页文件大小"
- 选择C盘,设置为"自定义大小"
- 初始大小:1024MB
- 最大值:8192MB(根据物理内存16GB设置)
- 点击"设置"和"确定"
- 打开系统属性设置:
-
重启确认:应用设置后重启电脑
虚拟内存使用情况分析:
Get-WmiObject -Class Win32_PageFileUsage | ForEach-Object { [PSCustomObject]@{ 路径 = $_.Name 当前大小_MB = $_.AllocatedBaseSize 当前使用率 = "$([math]::Round($_.CurrentUsage / $_.AllocatedBaseSize * 100, 2))%" 峰值使用_MB = $_.PeakUsage } } -
-
清理临时文件
# 清空用户临时文件 Get-ChildItem $env:TEMP -Recurse -Force -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue # 清空系统临时文件 Get-ChildItem C:\Windows\Temp -Recurse -Force -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue -
深度清理系统文件
# 1. 删除HP出厂包 $ppkg = "C:\Recovery\Customizations\FactoryApps_TU.ppkg"; if (Test-Path $ppkg) { $size = [math]::Round((Get-Item $ppkg).Length / 1GB, 2); Write-Host "HP 出厂包: $size GB" -ForegroundColor Yellow; Remove-Item $ppkg -Force -ErrorAction SilentlyContinue; Write-Host "已删除" -ForegroundColor Green } # 2. 删除崩溃转储 $dumpPath = "C:\Windows\LiveKernelReports"; if (Test-Path $dumpPath) { $dumps = Get-ChildItem $dumpPath -Filter "*.dmp" -Recurse -ErrorAction SilentlyContinue; $totalSize = ($dumps | Measure-Object -Property Length -Sum).Sum / 1GB; Write-Host "转储文件: $([math]::Round($totalSize, 2)) GB" -ForegroundColor Yellow; $dumps | Remove-Item -Force -ErrorAction SilentlyContinue; Write-Host "已删除" -ForegroundColor Green } # 3. 删除Office缓存 $officeCache = "C:\ProgramData\HP\Office2021C2R"; if (Test-Path $officeCache) { $size = [math]::Round((Get-ChildItem $officeCache -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2); Write-Host "Office 缓存: $size GB" -ForegroundColor Yellow; Remove-Item $officeCache -Force -Recurse -ErrorAction SilentlyContinue; Write-Host "已删除" -ForegroundColor Green } # 4. 清理Package Cache $pkgCache = "C:\ProgramData\Package Cache"; if (Test-Path $pkgCache) { $size = [math]::Round((Get-ChildItem $pkgCache -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2); Write-Host "Package Cache: $size GB" -ForegroundColor Yellow; Remove-Item "$pkgCache*" -Force -Recurse -ErrorAction SilentlyContinue; Write-Host "已清理" -ForegroundColor Green } -
磁盘清理
# 运行磁盘清理 cleanmgr /sagerun:1
优化结果
清理效果验证
# 查看清理后的C盘空间
Get-Volume C | Select-Object Size, SizeRemaining, @{N="UsedGB";E={[math]::Round(($_.Size - $_.SizeRemaining)/1GB,2)}}, @{N="FreeGB";E={[math]::Round($_.SizeRemaining/1GB,2)}}
验证结果:
| 指标 | 初始状态 | 最终状态 | 变化 |
|---|---|---|---|
| 总容量 | 237.8GB | 237.8GB | 不变 |
| 已用空间 | 186.6GB | 141.59GB | -45.01GB |
| 剩余空间 | 51.2GB | 96.24GB | +45.04GB |
| 清理成功率 | - | - | 释放了约24%的C盘空间 |
关键优化点
- 清理微信文件:释放约5.9GB空间
- 优化虚拟内存:释放约10GB空间
- 清理应用缓存:释放约8GB空间
- 系统组件清理:释放约3GB空间
- 临时文件清理:释放约2GB空间
- 其他优化:释放约16GB空间
长期空间管理策略
定期维护计划
| 周期 | 任务 | 预期效果 |
|---|---|---|
| 每2-3个月 | 清理应用缓存和临时文件 | 释放3-5GB空间 |
| 每半年 | 执行系统组件清理 | 释放2-4GB空间 |
| 每年 | 全面空间审计 | 优化10-15GB空间 |
定期执行的命令示例
每2-3个月执行的命令
# 1. 清理应用缓存和临时文件
# 清理用户临时文件
Get-ChildItem $env:TEMP -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
# 清理系统临时文件
Get-ChildItem C:\Windows\Temp -Recurse -Force -ErrorAction SilentlyContinue |
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
# 清理Edge浏览器缓存
Remove-Item "$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\Cache*" -Recurse -Force -ErrorAction SilentlyContinue
# 清理npm缓存
Remove-Item "$env:LOCALAPPDATA\npm-cache*" -Recurse -Force -ErrorAction SilentlyContinue
# 2. 检查并清理大文件
# 查找C盘所有大于500MB的文件
Get-ChildItem C:\ -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object {!$_.PSIsContainer -and $_.Length -gt 500MB} |
Select-Object FullName, @{N="SizeGB";E={[math]::Round($_.Length/1GB,2)}} |
Sort-Object SizeGB -Descending |
Select-Object -First 20
每半年执行的命令
# 1. 执行系统组件清理
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
# 2. 检查并清理WPS旧版本
$oldWpsVersion = "$env:LOCALAPPDATA\Kingsoft\WPS Office\12.1.0.24657"
if (Test-Path $oldWpsVersion) {
$size = (Get-ChildItem $oldWpsVersion -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB
Write-Host "旧版本 WPS (12.1.0.24657) 大小: $([math]::Round($size, 2)) GB" -ForegroundColor Yellow
# 删除旧版本
Remove-Item $oldWpsVersion -Force -Recurse -ErrorAction SilentlyContinue
if (-not (Test-Path $oldWpsVersion)) {
Write-Host "旧版本 WPS 已删除,释放 $([math]::Round($size, 2)) GB" -ForegroundColor Green
}
}
# 3. 清理Package Cache
$pkgCache = "C:\ProgramData\Package Cache"
if (Test-Path $pkgCache) {
$size = [math]::Round((Get-ChildItem $pkgCache -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)
Write-Host "Package Cache: $size GB" -ForegroundColor Yellow
Remove-Item "$pkgCache*" -Force -Recurse -ErrorAction SilentlyContinue
Write-Host "已清理" -ForegroundColor Green
}
每年执行的全面空间审计
# 1. 查看C盘空间基本信息
Get-Volume C | Select-Object Size, SizeRemaining, @{N="UsedGB";E={[math]::Round(($_.Size - $_.SizeRemaining)/1GB,2)}}, @{N="FreeGB";E={[math]::Round($_.SizeRemaining/1GB,2)}}
# 2. 递归统计C盘根目录下各文件夹的真实大小
Get-ChildItem C:\ -Directory | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum / 1GB
[PSCustomObject]@{
Folder = $_.Name
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending | Format-Table -AutoSize
# 3. 分析用户目录大小
Get-ChildItem C:\Users -Directory -ErrorAction SilentlyContinue | ForEach-Object {
$size = (Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB;
[PSCustomObject]@{
UserFolder = $_.Name;
SizeGB = [math]::Round($size, 2)
}
} | Sort-Object SizeGB -Descending
# 4. 分析AppData目录大小
"Local: $([math]::Round((Get-ChildItem $env:LOCALAPPDATA -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)) GB, Roaming: $([math]::Round((Get-ChildItem $env:APPDATA -Recurse -File -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1GB, 2)) GB"
# 5. 检查虚拟内存使用情况
Get-WmiObject -Class Win32_PageFileUsage | ForEach-Object {
[PSCustomObject]@{
路径 = $_.Name
当前大小_MB = $_.AllocatedBaseSize
当前使用率 = "$([math]::Round($_.CurrentUsage / $_.AllocatedBaseSize * 100, 2))%"
峰值使用_MB = $_.PeakUsage
}
}
日常使用建议
-
文件管理:
- 将大型文件默认保存到其他分区
- 定期检查并清理聊天软件的文件存储
- 建立良好的文件分类和备份习惯
-
应用管理:
- 定期检查并卸载不常用的应用程序
- 注意应用程序的默认安装位置,尽量安装到非系统盘
- 控制应用程序的自动更新和缓存设置
-
系统设置:
- 根据物理内存大小合理设置虚拟内存
- 启用Windows存储感知,自动清理临时文件
- 定期检查系统还原点和卷影副本设置
-
监控预警:
- 当C盘空间低于40GB时,及时进行清理
- 建立空间使用趋势跟踪,提前发现异常增长
- 使用以下命令定期检查C盘空间:
# 定期检查C盘空间 Get-Volume C | Select-Object Size, SizeRemaining, @{N="UsedGB";E={[math]::Round(($_.Size - $_.SizeRemaining)/1GB,2)}}, @{N="FreeGB";E={[math]::Round($_.SizeRemaining/1GB,2)}}, @{N="FreePercent";E={[math]::Round($_.SizeRemaining/$_.Size*100,2)}} | Format-Table -AutoSize
技术要点回顾
- 权限意识:了解Windows系统权限对文件统计的影响,避免被错误的统计结果误导
- 工具选择:根据不同场景选择合适的工具(PowerShell vs CMD)
- 系统文件:了解系统隐藏文件的作用和管理方法
- 安全清理:优先使用系统自带工具,避免使用不可信的第三方清理软件
- 数据备份:在执行大规模清理前,确保重要数据已备份
- 逐层分析:通过逐层分析目录结构,找到真正的空间占用源
- 验证步骤:通过多种方法验证清理效果,确保操作的有效性
结论
通过本次深度排查和优化,我成功将C盘剩余空间从51.2GB增加到96.24GB,释放了约45GB的宝贵空间。这个过程不仅解决了当前的空间不足问题,也让我对Windows系统的空间管理有了更深入的理解。
空间管理是一个持续的过程,需要定期维护和良好的使用习惯。通过建立科学的空间管理策略,我们可以确保系统始终保持在最佳状态,避免因空间不足而影响工作效率和系统性能。
未来,我将继续完善这套空间管理方法,并将其应用到日常的系统维护中,为电脑的长期稳定运行保驾护航。