1. 为什么常规清理对 AppData 无效:C盘爆满排查的真实困境
C 盘飘红这件事,很多人第一反应是打开「磁盘清理」、开「存储感知」、删临时文件,然后看着释放出来的两三个 G 松一口气。但过不了几天,红色又回来了。我自己就经历过这个循环:清理、反弹、再清理、再反弹,直到某天打开存储设置一看,C 盘 146GB,光「已安装的应用」就标了 94GB,可点进去按大小排序,最大的 SSMS 才 2.85GB,飞书 1.51GB,VMware 1.05GB,加起来连 10GB 都不到。剩下的 80 多 GB 去哪了?系统没告诉我。
这就是 AppData 类问题的核心特征:空间被吃掉了,但吃空间的东西不在你习惯查看的位置。Windows 的「已安装应用」统计口径,和你手动翻 Program Files 看到的体积,根本不是一回事。它会把用户数据目录、目录联接点指向的内容、部分缓存都算进去,但列表里又不会把C:\Users\你的用户名\AppData展开给你看。于是你陷入一个死循环:系统说应用占了 94GB,你找不到这 94GB,只能继续删临时文件,删完还是不够。
网上教程失效的另一个原因,是它们默认「空间被大文件占了」。但 AppData 的占用模式恰恰相反——它是海量小文件累积。AppData\Roaming\Tencent7.4GB、AppData\Roaming\LarkShell3.7GB、AppData\Local\JetBrains3.74GB、AppData\Local\Temp2.34GB,这些目录单看每个文件都不大,但数量惊人,资源管理器右键属性都要转半天。磁盘清理工具扫的是系统级临时目录,根本不会深入Roaming下面每个软件自己的缓存文件夹。
还有一个更隐蔽的坑:目录联接点。C:\Program Files\Microsoft Office、C:\Program Files\Azure Data Studio、C:\Program Files\WinRAR这些路径挂在 C 盘,实际目标可能在 D 盘。Windows 统计时可能把它们算进 C 盘应用体积,但你手动查看时又对不上。这不是你看漏了,是统计方式本身就不直观。
所以这次我换了个思路:不再盲目清,而是先让 Codex 通过 TaoToken 统一通道做一次分层排查。目标很明确——把 C 盘占用按目录层级拆开,区分系统文件、应用缓存、统计假象,找出真正的「真凶」。下面把完整过程拆成可复制的步骤,你跟着做就能复现。
2. TaoToken 前置准备:统一 Key 与 API 通道接入 Codex
要让 Codex 帮你排查磁盘,第一步不是写命令,而是把 Codex 接到一个稳定的 API 通道上。我用的方案是 TaoToken,它把模型调用统一成一个 Key、一个 Base URL,省得在多个平台之间来回切换配置。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,配置时直接填这个。
为什么排查磁盘这种任务也值得走统一通道?因为 Codex 在分析目录结构时,需要多轮对话:先列顶层目录,再逐层下钻,遇到联接点还要追问。如果每轮都换 Key、换端点,配置成本比排查本身还高。TaoToken 的好处是 Base URL 和 Key 一次配好,后面所有请求都走同一个入口,Codex 的上下文不会因为切换通道而断掉。
具体要准备三样东西,我把它叫「三件套」:Base URL、API Key、Model ID。Base URL 填https://taotoken.net/api,API Key 在控制台创建,Model ID 根据你用的模型填,比如gpt-4o或claude-sonnet-4-20250514这类。这三件套在后面的配置文件里会反复出现,先记牢。
创建 Key 的路径是进控制台,找到 API Keys 页面,新建一个 Key,复制出来。注意 Key 只显示一次,丢了就得重建。控制台地址走 deep link:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API Keys 页面在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
如果你用的是 Claude Code 这类工具,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各客户端的配置示例。模型对话入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,可以先在网页里试一句「帮我分析 C 盘 AppData 占用」,确认通道通了再往下走。
这一步的关键是:先把通道打通,再谈排查。很多人卡在配置上,结果排查还没开始就放弃了。TaoToken 把这一步压缩成填三个字段,后面就能专注在磁盘分析本身。
3. 可复制配置:Codex 接入 TaoToken 的 JSON 与 TOML 片段
配置这一步我踩过坑,所以把能直接复制的片段都列出来。不同客户端配置文件路径不一样,下面按常见的几种给。
先说 Codex CLI 的配置。Codex 的配置文件通常在用户目录下的.codex文件夹里,Windows 路径是C:\Users\你的用户名\.codex\config.toml。如果你用的是 Codex 的 auth 方式,还会涉及auth.json。先看config.toml:
# C:\Users\你的用户名\.codex\config.toml model = "gpt-4o" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"这里base_url填 TaoToken 的 API 地址,env_key指向环境变量名,Key 本身不写进文件,避免泄露。然后在系统环境变量里加一条TAOTOKEN_API_KEY,值就是你创建的 Key。Windows 下可以用 PowerShell 设置:
# 设置用户级环境变量,重启终端后生效 [Environment]::SetEnvironmentVariable("TAOTOKEN_API_KEY", "你的Key", "User")如果你用的是auth.json方式,文件在C:\Users\你的用户名\.codex\auth.json,内容长这样:
{ "taotoken": { "api_key": "你的Key", "base_url": "https://taotoken.net/api" } }注意auth.json里直接放 Key 有泄露风险,建议配合文件权限控制,或者优先用环境变量方式。
再说 Cline 的配置。Cline 是 VS Code 插件,配置在 VS Code 的 settings.json 里,路径是C:\Users\你的用户名\AppData\Roaming\Code\User\settings.json。加这一段:
{ "cline.apiProvider": "openai", "cline.openaiApiKey": "你的Key", "cline.openaiBaseUrl": "https://taotoken.net/api", "cline.openaiModelId": "gpt-4o" }Cline 走 OpenAI 兼容协议,所以apiProvider选openai,Base URL 填 TaoToken 的地址,Model ID 按你实际用的填。这三件套——Base URL、Key、Model ID——在 Cline 里一个都不能少,缺一个就连不上。
如果你用 CC Switch 管理多个配置,它的配置文件在C:\Users\你的用户名\.cc-switch\config.json,结构类似,把 TaoToken 作为一个 provider 加进去:
{ "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "你的Key", "model": "gpt-4o" } } }配好之后,重启终端或 VS Code,让环境变量和配置生效。验证通道是否通,可以用一条最简单的 curl:
curl https://taotoken.net/api/v1/models \ -H "Authorization: Bearer 你的Key"返回模型列表就说明通道通了。这一步别跳过,后面排查出问题时,你能快速判断是通道问题还是磁盘分析问题。
4. 验证请求:用 Codex 分层读取 AppData 占用并定位真凶
通道通了,开始真正的排查。核心思路是分层下钻,不要一上来就扫全盘,那样输出太长,Codex 也容易抓不住重点。我分四层走。
第一层,先看顶层目录占用。在 Codex 里发这样的指令:
帮我分析 C 盘空间占用,先列出 C:\ 下各顶层目录的大小, 重点看 Program Files、Program Files (x86)、Users、Windows、ProgramData, 以及根目录下的 hiberfil.sys 和 pagefile.sys。 用 PowerShell 命令实现,输出按大小降序。Codex 会给出类似这样的命令:
Get-ChildItem C:\ -Directory -Force -ErrorAction SilentlyContinue | ForEach-Object { $size = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]@{ Path = $_.FullName SizeGB = [math]::Round($size / 1GB, 2) } } | Sort-Object SizeGB -Descending | Format-Table -AutoSize跑完你会看到Users往往是大头。我这边C:\Users占了 60GB 以上,其中绝大部分在 AppData。
第二层,下钻到 AppData。指令:
继续分析 C:\Users\你的用户名\AppData 下的占用, 分别列出 Roaming、Local、LocalLow 三个子目录的大小, 然后对 Roaming 和 Local 再下钻一层,列出各自下面最大的 10 个目录。对应命令:
$appData = "C:\Users\你的用户名\AppData" Get-ChildItem $appData -Directory -Force | ForEach-Object { $size = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]@{ Path = $_.FullName SizeGB = [math]::Round($size / 1GB, 2) } } | Sort-Object SizeGB -Descending | Format-Table -AutoSize我跑出来的结果:Roaming约 31.2GB,Local约 26.1GB,合计 57.5GB。这一下就解释了为什么「应用列表看起来不大」——空间全在用户数据目录里。
第三层,找具体真凶。对Roaming和Local分别下钻:
# Roaming 下最大的 10 个目录 Get-ChildItem "C:\Users\你的用户名\AppData\Roaming" -Directory -Force | ForEach-Object { $size = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]@{ Name = $_.Name; SizeGB = [math]::Round($size / 1GB, 2) } } | Sort-Object SizeGB -Descending | Select-Object -First 10 | Format-Table -AutoSize我的结果:Tencent7.4GB、LarkShell3.7GB、Kingsoft2.1GB、Trae CN2.07GB。Local那边:Microsoft6.29GB、JetBrains3.74GB、Temp2.34GB、Feishu1.52GB。这些加起来就 30GB 出头了。
第四层,查联接点和系统占用。指令:
检查 C:\Program Files 下是否存在目录联接点(junction/symlink), 列出所有 ReparsePoint 类型的目录及其目标路径。 另外统计 C:\Windows 下 WinSxS、System32、Installer 三个目录的大小。命令:
# 查联接点 Get-ChildItem "C:\Program Files" -Directory -Force | Where-Object { $_.Attributes -match "ReparsePoint" } | Select-Object Name, @{N="Target";E={$_.Target}} | Format-Table -AutoSize # 查 Windows 子目录 foreach ($dir in @("WinSxS", "System32", "Installer")) { $path = "C:\Windows\$dir" $size = (Get-ChildItem $path -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum [PSCustomObject]@{ Path = $path; SizeGB = [math]::Round($size / 1GB, 2) } }我查到C:\Program Files\Microsoft Office、Azure Data Studio、WinRAR都是联接点,实际指向 D 盘。这就是统计口径对不上的原因。WinSxS15.14GB、System327.91GB、Installer3.61GB,这些不能乱删,但能解释整盘空间为什么比肉眼看到的大。
四层跑完,真凶清楚了:AppData 57.5GB + Steam 18.24GB + Windows 35GB + hiberfil.sys 6.59GB,这才是 C 盘的真实构成。不是某个大软件,是用户数据目录的累积。
5. 常见报错排查:401、local proxy failed、reading choices 与 OAuth
排查过程中我遇到过几个典型报错,这里逐个拆。
401 Unauthorized。这个最常见,通常是 Key 没配好或环境变量没生效。先确认环境变量:
echo $env:TAOTOKEN_API_KEY如果输出为空,说明环境变量没设上,或者设完没重启终端。Windows 下用户级环境变量设完要新开终端才生效。如果输出有值但还是 401,检查 Key 是否复制完整,有没有多余空格。还有一种情况是config.toml里env_key写的名字和实际环境变量名不一致,比如配置里写TAOTOKEN_API_KEY,环境变量却设成了TAOTOKEN_KEY,对不上就 401。
local proxy failed。这个报错通常出现在客户端尝试走本地代理但代理没起来的时候。检查你的客户端配置里有没有多余的 proxy 设置,比如http_proxy、https_proxy环境变量。如果有,先清掉:
Remove-Item Env:http_proxy -ErrorAction SilentlyContinue Remove-Item Env:https_proxy -ErrorAction SilentlyContinue然后确认 Base URL 直接填https://taotoken.net/api,不要加额外的代理层。Cline 里如果开了「使用代理」选项,关掉再试。
reading choices 报错。这个一般出现在响应格式不符合预期时,比如客户端期望 OpenAI 格式但服务端返回了别的结构。检查wire_api配置,Codex 的config.toml里应该写wire_api = "chat"。如果用的是 Cline,确认cline.apiProvider设成了openai,因为 TaoToken 走 OpenAI 兼容协议。Model ID 也要对,填错模型名可能导致返回结构异常。
OAuth 相关报错。如果你用的是 Claude Code 这类带 OAuth 流程的工具,报 OAuth 错误通常是认证方式选错了。Claude Code 接入 TaoToken 时,应该用 API Key 方式而不是 OAuth 方式。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有 Claude Code 的具体配置步骤。核心是把 Base URL 指向https://taotoken.net/api,Key 用 TaoToken 创建的 Key,不要走 Anthropic 官方的 OAuth 流程。
排查这些报错的通用思路:先确认三件套(Base URL、Key、Model ID)是否齐全且一致,再看网络层有没有多余代理,最后看协议格式是否匹配。大部分问题出在前两步。
6. 语义一致 CTA:把排查能力沉淀成长期可用的编码通道
这次排查让我意识到一件事:C 盘爆满这类问题,难点从来不是「不会删文件」,而是「不知道该删哪里」。网上教程给你的是通用模板,但每台机器的 AppData 构成都不一样,腾讯系、飞书、JetBrains、Steam 各占多少,只有实际扫一遍才知道。Codex 通过 TaoToken 通道做的,就是把「通用建议」变成「针对你这台机器的分层定位」。
如果你也想复现这套流程,通道配置是关键第一步。API Key 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 创建,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 有各客户端示例。想先试试模型对话,入口在 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,发一句磁盘分析指令就能看到效果。
如果你不只是想排查磁盘,还想把 Codex 用在日常编码、Agent 任务上,Coding Plan 更适合长期使用,地址在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。它把编码场景的调用统一管理,不用每次单独配 Key。
最后提醒一句:别让 AI 直接帮你删文件。Codex 的价值是定位和分析,删除动作自己按路径去操作。我这次扫出来的Tencent、LarkShell、JetBrains缓存,都是手动确认后再清的,WinSxS、System32、Installer一律不碰。删库跑路的教训,比 C 盘爆满严重得多。