
开发者如何清理和迁移 C 盘堆积的垃圾一次回收 30GB 的实战记录2026/6/3很多开发者都会遇到一个问题电脑用着用着C 盘突然爆红。明明项目都放在 D 盘为什么 C 盘还是越来越小原因很简单大量开发工具默认把缓存、运行时、全局包、浏览器内核、索引文件都塞进 C 盘用户目录。常见路径包括C:\Users\用户名\AppData\Local C:\Users\用户名\AppData\Roaming C:\Users\用户名\.gradle C:\Users\用户名\.vscode C:\Users\用户名\go本文记录一次开发环境清理和迁移过程重点不是单纯删文件而是建立一套长期可维护的方案缓存能删就删工具能迁移就迁移环境能隔离就隔离。一、先定位C 盘到底被谁吃了不要盲目删除先扫描几个开发者常见的大目录。1. 扫描用户目录大文件夹$paths ($env:USERPROFILE\AppData\Local\uv,$env:USERPROFILE\AppData\Local\pip,$env:USERPROFILE\AppData\Local\JetBrains,$env:USERPROFILE\AppData\Local\ms-playwright,$env:USERPROFILE\AppData\Local\Temp,$env:USERPROFILE\.gradle,$env:USERPROFILE\.vscode,$env:USERPROFILE\go,$env:USERPROFILE\AppData\Roaming\npm)foreach($pin$paths){if(Test-Path$p){$size(Get-ChildItem$p-Recurse-Force-ErrorAction SilentlyContinue|Measure-ObjectLength-Sum).Sum{0,8:N0} MB {1}-f([math]::Round($size/1MB,1)),$p}}2. 扫描已安装程序大小Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*, HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*-ErrorAction SilentlyContinue|Where-Object{$_.DisplayName-and$_.EstimatedSize}|Select-ObjectDisplayName,{NSizeMB;E{[math]::Round($_.EstimatedSize/1024,1)}}|Sort-ObjectSizeMB-Descending|Select-Object-First 30二、第一类可以直接删除的缓存这些目录本质上都是缓存删了最多下次重新下载或重新构建不影响源码。1. UV cacheUV 的缓存可能非常大我这里达到 8GB。uv cache clean如果命令不可用也可以直接删除Remove-Item$env:USERPROFILE\AppData\Local\uv\cache-Recurse-Force后续建议把 UV 缓存迁移到 D 盘[Environment]::SetEnvironmentVariable(UV_CACHE_DIR,D:\uv\cache,User)[Environment]::SetEnvironmentVariable(UV_PYTHON_INSTALL_DIR,D:\uv\python,User)[Environment]::SetEnvironmentVariable(UV_TOOL_DIR,D:\uv\tools,User)2. pip cache如果已经不用 pip 或者已经迁移到 UVpip 缓存可以清理。Remove-Item$env:USERPROFILE\AppData\Local\pip-Recurse-Force3. Gradle cacheJava / Android 项目的 Gradle 缓存经常有 1GB 以上。Remove-Item$env:USERPROFILE\.gradle-Recurse-Force下次构建时 Gradle 会重新下载依赖。4. Go 模块缓存如果暂时不写 Go可以清理Remove-Item$env:USERPROFILE\go-Recurse-Force5. Temp 临时文件Remove-Item$env:USERPROFILE\AppData\Local\Temp\*-Recurse-Force-ErrorAction SilentlyContinue有些文件被进程占用删不掉属于正常现象。重启后再清一次即可。三、第二类不建议删但适合迁移到 D 盘有些缓存删掉会影响体验比如 IDE 索引、Playwright 浏览器内核。更好的方式是把真实目录移动到 D 盘再在原路径创建 Junction。Junction 是 Windows 的目录链接程序访问原路径时系统会自动跳转到新路径。程序完全无感知。通用迁移函数functionMove-AndJunction($src,$dst){if(-not(Test-Path$src)){Write-Hostskip:$srcnot foundreturn}New-Item-ItemType Directory-Path(Split-Path$dst)-Force|Out-Nullrobocopy$src$dst/E/MOVE/MT:8/NFL/NDL/NJH/NJS/NC/NS|Out-Nullcmd/c mklink/J$src$dst}1. 迁移 Playwright 浏览器Playwright 默认浏览器目录C:\Users\用户名\AppData\Local\ms-playwright迁移到 D 盘Move-AndJunction$env:USERPROFILE\AppData\Local\ms-playwrightD:\ms-playwright同时建议设置环境变量避免以后新浏览器又下载回 C 盘[Environment]::SetEnvironmentVariable(PLAYWRIGHT_BROWSERS_PATH,D:\ms-playwright,User)2. 迁移 JetBrains 缓存JetBrains 系列 IDE 的索引和缓存很大常见目录C:\Users\用户名\AppData\Local\JetBrains\IntelliJIdea版本\index C:\Users\用户名\AppData\Local\JetBrains\IntelliJIdea版本\splash迁移示例Move-AndJunction$env:USERPROFILE\AppData\Local\JetBrains\IntelliJIdea2023.2\indexD:\jetbrains-cache\indexMove-AndJunction$env:USERPROFILE\AppData\Local\JetBrains\IntelliJIdea2023.2\splashD:\jetbrains-cache\splash四、第三类卸载不再需要的大型开发套件1. Anaconda如果你不做数据分析、科学计算、机器学习Anaconda 很可能是不必要的。它的问题是体积很大动辄 5GB-10GB默认 base 环境容易被 pip/conda 混装污染PATH 里经常插入多个 Anaconda 目录很多包实际根本用不上。更轻量的替代方案是 UV。迁移前先备份 pip 包conda list|Select-Stringpypi_0|ForEach-Object{$parts$_-split\s$($parts[0])$($parts[1])}$env:USERPROFILE\anaconda-backup\keep-packages.txt安装 UV可以安装到 D 盘例如D:\uv\bin\uv.exe D:\uv\python D:\uv\cache D:\uv\tools配置环境变量[Environment]::SetEnvironmentVariable(UV_CACHE_DIR,D:\uv\cache,User)[Environment]::SetEnvironmentVariable(UV_PYTHON_INSTALL_DIR,D:\uv\python,User)[Environment]::SetEnvironmentVariable(UV_TOOL_DIR,D:\uv\tools,User)用 UV 重建项目环境cd D:\py-automation uv init uv python pin 3.11 uv add playwright fastapi openai requests httpx pyautogui loguru以后运行脚本uv run python script.py不要再依赖全局python或全局pip。五、Node.js / npm / pnpm 清理1. 清理不用的 Node 版本如果使用 nvm-windows可以查看已安装版本nvm list卸载不用的旧版本nvm uninstall 20.19.02. 清理 npm 全局孤儿包npm 全局目录一般在npm root-g npm config get prefix有时C:\Users\用户名\AppData\Roaming\npm里会残留以前装过的全局包例如Vue CLIcnpmnewmantypescript如果项目已经不依赖全局命令可以清理Remove-Item$env:APPDATA\npm\node_modules\vue-Recurse-ForceRemove-Item$env:APPDATA\npm\node_modules\cnpm-Recurse-ForceRemove-Item$env:APPDATA\npm\node_modules\newman-Recurse-ForceRemove-Item$env:APPDATA\npm\node_modules\typescript-Recurse-ForceRemove-Item$env:APPDATA\npm\cnpm*-ForceRemove-Item$env:APPDATA\npm\newman*-ForceRemove-Item$env:APPDATA\npm\vue*-ForceRemove-Item$env:APPDATA\npm\tsc*-ForceRemove-Item$env:APPDATA\npm\tsserver*-Force3. npm 项目是否可以迁移到 pnpm可以。npm 项目只要有package.json就可以用 pnpm 重建Remove-Itemnode_modules-Recurse-ForceRemove-Itempackage-lock.json-Force pnpm install如果是 yarn 项目也可以迁移Remove-Itemnode_modules-Recurse-Force pnpm import pnpm installpnpm 的优势对比项npmpnpm安装速度普通更快磁盘占用每个项目一份 node_modules全局 store 复用依赖隔离容易出现幽灵依赖更严格monorepo一般原生支持更好六、清理 PATH卸载软件后PATH 里经常还残留旧路径例如 Anaconda、PyCharm、旧 Node 等。查看 PATH$env:PATH-split;清理用户 PATH 示例$userPath[Environment]::GetEnvironmentVariable(Path,User)$cleaned($userPath-split;|Where-Object{$_-ne-and$_-notmatchanaconda-and$_-notmatchPyCharm})-join;[Environment]::SetEnvironmentVariable(Path,$cleaned,User)七、最终回收效果一次清理大概回收如下项目回收空间Anaconda约 11 GBUV cache约 8 GBTemp约 3 GBPlaywright 浏览器迁移约 1.3 GBJetBrains 缓存迁移约 1.6 GBpip cache约 900 MBGradle cache约 1.5 GBVS Code 扩展约 1.3 GBGo 模块缓存约 500 MBnpm 孤儿包约 300 MB总计大约可以回收30GB。八、建议的长期方案Python用 UVuv init uv add requests uv run python main.py不要再把所有包装到全局 Python 或 Anaconda base。Node.js用 nvm 管 Node 版本用 pnpm 管依赖nvm use 22.22.2 pnpm install浏览器自动化Playwright 浏览器放 D 盘[Environment]::SetEnvironmentVariable(PLAYWRIGHT_BROWSERS_PATH,D:\ms-playwright,User)IDE 缓存IDE 缓存可以用 Junction 挪走不要直接堆在 C 盘。总结开发者 C 盘爆满不是因为系统太大而是开发工具默认把大量缓存和运行时塞进了用户目录。清理思路很简单缓存直接删UV、pip、Temp、Gradle、Go大缓存迁移Playwright、JetBrains不用的软件卸载Anaconda、旧 Node、多余 IDE环境变量统一指向 D 盘项目依赖用 UV / pnpm 重建不依赖全局环境。这样清理后C 盘不仅能立刻回收几十 GB以后也不容易再次爆红。