← Back to skills
extension
Category: Productivity & OfficeAPI key requirement unconfirmed

windows-disk-cleanup

Windows 系统盘空间扫描、可迁移/可删除项识别与安全清理执行。只要用户提到 C 盘空间不足、磁盘满了、分析磁盘占用、哪些文件可以删、清理缓存或卸载残留、把内容迁移到其他盘(如 D 盘)腾空间,就应加载本 skill,包括"只看不动"的纯分析请求。覆盖 Git Bash du 扫描与避坑、AppData/ProgramData/开发者工具缓存排查清单、包管理器缓存迁移到数据盘的配置配方、UAC 提权删除受保护残留。

personAuthor: muou000hubModelScope

Windows 系统盘扫描与清理

把「磁盘满了/清理 C 盘」类请求拆成三步:扫描 → 报告 → 执行(经用户确认)。环境假设:Windows + Git Bash(ZCode 默认 shell);流程已在无管理员权限的会话中验证过。

工作模式

| 用户意图 | 行为 | |---|---| | "看看占用 / 哪些能删 / 哪些能迁"(分析) | 只扫描 + 报告,不动任何文件 | | "帮我清理 / 执行 / 继续清理"(已看过报告或明确授权) | 按分级执行,边做边汇报 | | 新对话里直接要求清理 | 默认先扫描报告;用户明确说"直接删"才跳过 |

红线(先记住)

  1. 不确定就不删——说不清用途的目录写进报告让用户判断,不放进删除清单。
  2. 系统组件不手动删:Windows\WinSxS(只能用 DISM)、Windows\Installer(只能用 PatchCleaner 的 Move 模式)、ProgramData\Package Cache(修复/卸载依赖)。用户要求清 WinSxS 时也只给 DISM 命令。
  3. 缓存优先"迁移"而非"删除":用户有数据盘时先改配置 + robocopy 搬运,空间同样腾出来,且保留缓存价值。
  4. 删除前检查占用:清某应用的缓存前先看它是否在运行(VS Code 的缓存必须在 Code 关闭时清)。
  5. 每个删除批次后复查残留,报告如实说明哪些没删掉、为什么(最常见:文件被占用、需要管理员权限)。

第一步:扫描

  1. 驱动器总览 + 根目录大文件(pagefile/hiberfil/swapfile 可能占数 GB)——命令见 references/scan-commands.md。
  2. 并行扫主要目录(增量输出、后台跑):
    bash <skill目录>/scripts/scan.sh c                       # C 盘一级分布(含 $Recycle.Bin 等隐藏目录)
    bash <skill目录>/scripts/scan.sh u                       # 用户目录 + AppData Local/Roaming/LocalLow
    bash <skill目录>/scripts/scan.sh d "/c/Program Files"    # 任意目录的子项
    
    大目录扫描是分钟级:一律 run_in_background: true + timeout: 600000,完成后读输出文件,中途也可读日志看进度(脚本把 >> 目录 ... 进度打到 stderr,stdout 只有结果行,可用进度提示判断是否卡住)。补扫 Program Files、Program Files (x86)、ProgramData、Windows 清理候选(命令在 scan-commands.md)。
  3. 核对已知重灾区:读 references/cleanup-targets.md 逐项确认存在性和实际大小——清单覆盖开发者机器上绝大多数空间黑洞。
  4. 交叉找卸载残留:导出注册表已安装程序清单(scan-commands.md),与 AppData/ProgramData 目录名交叉对比(有目录、无程序 = 残留)。
  5. 顺带确认:WSL/Docker 虚拟磁盘的实际位置(常是几十 GB 级大头)、用户 dotfiles(.cargo/.rustup/.cache/.vscode)、根目录可疑残留(C:\AMD、随机名目录等)。

第二步:报告

按「行动建议」分组,不要按目录罗列。结构:

  1. 总览:盘容量/剩余 + 大头分布表
  2. 立即可删(缓存类,自动重建):大小 + 一句"为什么安全"
  3. 建议迁移到数据盘:大小 + 具体方法(命令或操作路径)
  4. 卸载残留:目录 + 判定依据
  5. 需要工具/谨慎处理:PatchCleaner、DISM、重复安装的程序等
  6. 明确不动的:Package Cache、WinSxS 等,写清原因

写实际数字(3.2G 而不是"很大"),用表格,跟随用户语言。示例:

| 位置 | 大小 | 说明 | |---|---|---| | Windows\Installer 孤立文件 | 10.7G | 已卸载软件的 MSI 缓存,用 PatchCleaner 移到 D 盘 | | npm 缓存 | 3.2G | 删除后下次安装自动重下;建议迁移到数据盘 |

第三步:执行清理

  • 多步操作先建 TodoWrite 清单(每项:目标 → 执行 → 验证)。
  • 删除统一 rm -rf ... 2>/dev/null + 删除后复查;个别锁定文件失败属正常,如实汇报。
  • 具体命令与每类目标的处理方式:references/cleanup-targets.md。
  • 迁移配置(npm/pnpm/yarn/pip/uv/cargo… + robocopy 搬运 + 逐项验证):references/cache-migration.md。
  • 权限受限(C 盘根目录、驱动文件,报 Permission denied / Access is denied):用 scripts/elevated-remove.ps1 走 UAC 提权:
    powershell -NoProfile -Command "Start-Process powershell -Verb RunAs -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-File','<skill目录>/scripts/elevated-remove.ps1','C:\AMD'"
    # Start-Process 立即返回:Start-Sleep 10~20 秒后再验证 Test-Path
    
    会弹 UAC 窗,需用户点击确认;如果用户不在场,把命令交给用户自行运行。

收尾

  • 前后对比磁盘空间(Get-PSDrive C),汇报实际释放量和未处理项。
  • 提醒生效条件:setx 环境变量需新终端;GUI 类操作(PatchCleaner、微信改存储路径)留给用户并给出步骤。
  • 若存在记录清理状态的记忆/项目文档,更新已执行与未执行项。
<!-- OB-S:KLcg3yO9-tJD6ZXrM7idKA -->