storage-analyzer-windows

Polar Sponsor
爱发电 赞助
.NET 9.0

【做什么】纯 Windows 只读存储分析 — 扫描 12+ 组目标(含 Installer/ProgramData/回收站)→ 三灯分级(🟢可自动清/🟡需判断/🔴建议卸载)→ 交互式 HTML 报告 + 本地服务一键删。 【何时用】用户抱怨磁盘空间不足、要求清理/分析/查看空间占用、想知道什么东西吃硬盘。 【触发词】磁盘满了/C盘满了/D盘满了/空间不够/清理空间/清理磁盘/清理C盘/占空间/ 存储分析/磁盘分析/看一下存储/电脑空间/storage analysis/disk cleanup/清缓存/

存储分析器 Windows QQ Windows , äHTML + + + + 1-2.scan.py + 12 + , + TEMP% storage sc

功能概述

存储分析器 Windows QQ Windows , äHTML + + + + 1-2.scan.py + 12 + , + TEMP% storage sc是一项面向实际任务的技能,主要用于Storp 3.;Agent (v) + jSONXIMP% storage analysis.json.Stet 4.se.。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Storage Analyzer Windows

纯 Windows 只读存储分析,交互式 HTML 报告 + 一键清理。

阶段 谁执行 做什么 产出
Step 1-2 scan.py 脚本 只读扫描 12 组目标,算大小 %TEMP%storage_scan.json
Step 3 Agent (你) 读参考→探查→三灯分级→写 JSON %TEMP%storage_analysis.json
Step 4 server.py 脚本 启动本地服务 → 交互式网页 http://127.0.0.1:端口/
Step 5 Agent (你) 用 preview_url 打开 + 对话给摘要 浏览器预览 + 文字结论

速览:用户说"磁盘满了" → 跑 scan.py --quick(0.3s) 看概况 → 需要详情再跑全量(9s) → 按附录A模板写分析JSON → server.py 启动交互式服务 → 自动用 preview_url 打开 → 给用户一句话摘要。全程只读扫描,交互式网页支持一键清理。

约束规则

铁律

  • 全程只读扫描。 只能跑 os.scandir / shutil.disk_usage / 列目录。
  • 删除命令只展示,不执行。 报告里的清理命令供用户在终端确认后运行。 即使用户在对话里说"帮我删",也要先停下确认,不要直接代跑。
  • 系统目录保护。 C:Windows 除了 Installer / Temp / SoftwareDistribution 之外不扫描不操作。
  • 回收站警告。 清空回收站前必须明确告知空间释放量。
  • 长路径处理。 Windows 路径 >260 字符时使用 \? 前缀。

⏸️ 确认门

Step 3 完成后,必须暂停,向用户展示:

  1. Top 5 摘要(表格:排名/名称/大小/分级/一句话说明)
  2. 三灯汇总(🟢 X 项约 Y GB / 🟡 X 项约 Y GB / 🔴 X 项约 Y GB)
  3. 问用户:"分级结果如上,是否继续生成报告?还是需要调整?"

用户同意后才进入 Step 4。 如果用户要求调整,只调用户指定的项,不要推翻全部分级。

异常处理

异常场景 处理方式
Python 未安装 提示用户安装 Python 3.10+:winget install python3 或从 python.org 下载。不要用 python3 命令,Windows 上是 python 或 py -3。
scan.py 输出为空 检查 %TEMP%storage_scan.json 是否存在且非空。为空则重新扫描并加 2>&1 捕获 stderr 排查错误。
扫描结果全 0(空盘) 报告直接给摘要"磁盘基本为空,无需清理"。不跑 Step 3 分析。
某个 target 目录不存在 跳过,不给 denied。如 C:WindowsInstaller 在某些精简版 Windows 上不存在。
server.py 端口被占用 server.py 使用端口 0(随机),不会冲突。如遇异常,检查防火墙/杀毒软件是否拦截 127.0.0.1 本地回环。仅在用户要求服务模式时使用。
build_report.py 写入桌面失败 检查桌面路径是否可写,如被 OneDrive 同步占用则改写到 %USERPROFILE% 或 %TEMP%。
浏览器打不开 手动复制终端输出的 URL 到浏览器。或用 --no-browser 参数跳过自动打开。
recycle_bin 扫描为空 原因:普通用户无权读 C:$Recycle.Bin。给提示:"回收站大小无法直接读取,请右键桌面回收站查看属性"。
磁盘接近满(<1GB 可用) 优先使用 --quick 模式避免扫描写出大量 JSON 占用最后空间。写 analysis JSON 时确认 %TEMP% 有足够空间。
权限拒绝(denied) 扫描结果中 denied 标注的目录,在报告中列出并说明"可能遗漏体量"。不要尝试 runas 提权。

执行流程

Step 1 快速扫描(可选,0.5s 内)

python scripts/scan.py --quick > %TEMP%storage_scan.json

仅扫描一级子目录大小(跳过递归),大文件自动聚合显示。 适用场景:快速判断"有没有大问题"。

Step 2 全量扫描

python scripts/scan.py > %TEMP%storage_scan.json

扫描 12 组目标(详见 references/windows.md),耗时约 9-15s(SSD)。 读不到的目录标 denied。

Step 3 分析与分级

先读 references/windows.md 了解布局规则,再读扫描 JSON。

按 附录A 的 6 条检查清单逐条执行,按 附录B 的模板写出 analysis JSON。

核心决策规则(详见附录A):

  • 🟢 可自动清理 — 纯缓存/临时文件/可再生,正例:pip Cache,反例:node_modules
  • 🟡 需人工判断 — 含用户数据或需判断成本,正例:WeChat Files,反例:WindowsSystem32
  • 🔴 建议卸载 — 大应用/重复安装,正例:不再用的 MobileAppEngine,反例:C:Windows
  • 其他 → 不展示(归蓝色)

Step 4 启动交互式服务并自动打开

使用 PowerShell Start-Process 以独立进程启动(不受 Bash 超时影响):

Start-Process -FilePath "python" -ArgumentList "scripts/server.py","%TEMP%storage_analysis.json","--no-browser","--port-file","%TEMP%storage_server_url.txt" -WindowStyle Hidden

启动后:

  1. 等待 2 秒读取 %TEMP%storage_server_url.txt 获取 URL
  2. 健康检查 GET /health 确认服务正常
  3. 用 Start-Process 在用户默认浏览器中打开 URL(不要用 preview_url,内嵌浏览器无法正确执行交互式功能)
  4. 同时可用 preview_url 在内嵌面板中预览(仅查看,一键清理功能需在真实浏览器中使用)

这是默认模式,交互式网页支持:

  • 🟢 一键清理全部 — 确认面板 + 逐项串行删除 + 进度反馈
  • 🟢 单项移到废纸篓 / 直接删除
  • 🟡 在资源管理器打开 / 安全子路径移废纸篓
  • 🔴 在资源管理器打开(去卸载)
  • 折叠卡片、锚点导航、命令复制

可选:静态报告模式(仅查看,不能操作删除):

python scripts/build_report.py %TEMP%storage_analysis.json %USERPROFILE%Desktopstorage-report.html

纯静态只读 HTML 文件,不含删除功能。仅在用户明确要求静态报告时使用。

Step 5 摘要总结

报告打开后,给一段结论先行的摘要:总可释放估算、最该先清的 2-3 项、风险最高的一项。细节让用户看网页。

附录A:分析检查清单

逐条执行,每完成一条在脑中打勾。

  • 1. 挑 Top 5:按 size_kb 排序全部 groups 条目,取前 5,判定类型标签。 标签按优先级从高到低匹配,命中即停止,后面的不再考虑:

    优先级 标签 释义 判定依据
    1 系统文件 操作系统运行依赖的核心文件与组件仓库,误删可能导致系统不稳定、功能异常或无法启动 C:Windows 下除 Temp/SoftwareDistribution 外的全部子目录, C:Boot, EFI 分区, pagefile.sys, hiberfil.sys
    2 应用程序文件 应用程序安装目录下的全部文件(含 exe/dll/资源/配置),删除将导致对应应用无法运行 C:Program Files*, C:Program Files (x86)*, %LOCALAPPDATA%Programs* 下的应用目录
    3 虚拟机镜像 虚拟机/模拟器的磁盘镜像文件,删除将导致虚拟机数据完全丢失且不可恢复 EmulatorSdk 镜像, WSL vhdx, Hyper-V 虚拟硬盘, VMware .vmdk, VirtualBox .vdi
    4 应用数据 应用产生的不可再生或具有持久价值的用户个人数据,通常位于 AppData 及其子目录 WPS 模板, 微信聊天记录, 钉钉消息, 邮箱本地数据
    5 应用缓存 面向最终用户的应用产生的可再生临时文件,删除不影响功能、不丢用户数据 浏览器 Cache, 缩略图缓存, 微信/QQ 图片缓存, %TEMP%*, Office 最近文件索引
    6 开发缓存 包管理器/构建工具/IDE 产生的可再生中间文件,删除后可通过重新下载或构建恢复 pip Cache, .npm, .gradle, .m2/repository, Cargo target/, Yarn cache, NuGet packages
    7 用户文件 用户主动创建/编辑/保存的个人文档、工程文件、自建图片等 Desktop, Documents, Pictures, WorkBuddy* 项目目录
    8 媒体内容 从网络下载或应用缓存的消费型音视频文件,常见于 Downloads/Videos/Music 及各 App 离线目录 Downloads 里的 .mp4/.mkv/.avi, App 离线视频缓存, Music
    9 下载内容 Downloads 目录下用户通过浏览器/下载器获取后未整理的文件(安装包、压缩包、文档等) Downloads*.exe, Downloads*.msi, Downloads*.zip
    10 回收站 Windows 回收站内容 C:$Recycle.Bin, 各盘符 $Recycle.Bin
    11 其他 以上均不匹配的兜底分类 —

    互斥规则:按优先级 1→11 依次匹配,命中即停。例如:Downloads 下的安装包优先匹配 9(下载内容),而非 8(媒体内容);%TEMP% 下的编译中间文件优先匹配 6(开发缓存),而非 5(应用缓存)。

  • 2. 探查神秘大目录:对名称含 UUID/GUID/SSID 的目录、大小 >1GB 的 ProgramData 子目录、不明用途的隐藏目录 → ls 查看内部结构,查出归属。 例:kingsoft/wps_international/addons 实为国际版 WPS 的冗余插件。

  • 3. 三灯分类(只分"存在清理决策"的项,正常应用/系统文件归蓝色不展示):

    🟢 可自动清理 — 纯缓存/临时文件/安装包残留/可再生不丢用户数据

    • ✅ 正例:浏览器 Cache、%TEMP%*、--updater 目录、pip Cache(开发缓存可再生)、IntelliJ IDEA caches
    • ❌ 反例:node_modules(项目依赖,删了项目跑不了)、AppDataRoamingMicrosoft(Office 设置不可再生)、微信聊天记录(用户数据)
    • 必填 trash_paths[]、commands[{label,cmd}]、kill_processes[]。
    • ⚠️ trash_paths 不能为空,漏了按钮就不出现。

    🟡 需人工判断 — 含用户数据或有判断成本

    • ✅ 正例:WeChat Files(聊天记录含重要数据)、Downloads 文件夹(可能有重要文件未整理)、WPS 模板(含自定义)、VMware 虚拟机镜像(大小巨大但可能还在用)
    • ❌ 反例:C:WindowsInstaller 不能手删(用 DISM 清理)、C:WindowsWinSxS 不能手删(系统组件仓库)、C:WindowsSystem32 不能手删
    • 必填 content_profile、why_manual、disposal、risk。
    • 有核实过的安全子路径时 → trash_paths(🟡 只能移废纸篓,永不给 rm)。
    • 目录是 App 内部格式 → open_note 字段说明。
    • ⚠️ 口吻中性如产品说明,不写"我发现/提醒注意"。

    🔴 建议卸载(别手删) — 大应用/重复安装/想卸载的项

    • ✅ 正例:不再用的 MobileAppEngine(7.6GB)、EdrawSoft(1.2GB)、Autodesk(2GB+)
    • ❌ 反例:C:Windows(操作系统本身)、Microsoft Office(如果还在用)、dotnet(系统运行时依赖)、Git(开发必备工具)
    • 必填 why_keep、indirect_release(具体卸载步骤,可照做不是空话)、app_paths[]。
    • 不给删除按钮,只给"在资源管理器打开(去卸载)"。
  • 4. 数量检查:green+yellow+red 的总信息量应「一眼能看完」。 如果某级超过 10 项,挑最重要的列,其余合并到 summary。

  • 5. 大小字段规范:用"约 14 GB""合计约 8.6 GB"格式。 "约"已表示估算,不要再加"(估算)"。

  • 6. 按附录B模板写出完整 analysis JSON。 tier_stats 的 green/yellow/red 必须是可解析的 GB 数字开头(如"约 27.8 GB")。

附录B:analysis JSON 模板(照此结构写)

{
  "generated_at": "2026-06-03 17:00:00",
  "scan_seconds": 9.3,
  "system": {  /* 从 scan.json 的 system 字段直接复制 */ },
  "top5": [
    {"rank": 1, "tier": "red", "size": "约 7.6 GB", "type": "应用程序文件",
     "name": "MobileAppEngine", "path": "C:\Program Files\MobileAppEngine",
     "note": "华为手机助手模拟器,EmulatorSdk 占 7.4 GB"}
  ],
  "green": [
    {
      "name": "WorkBuddy 桌面端更新缓存",
      "path": "C:\Users\xxx\AppData\Local\@genieworkbuddy-desktop-updater",
      "size_estimate": "约 450 MB",
      "kill_processes": [],
      "trash_paths": ["C:\Users\xxx\AppData\Local\@genieworkbuddy-desktop-updater"],
      "commands": [
        {"label": "PowerShell 移入回收站",
         "cmd": "Remove-Item -Path "$env:LOCALAPPDATA\@genieworkbuddy-desktop-updater" -Recurse -Force"}
      ]
    }
  ],
  "yellow": [
    {
      "name": "WPS 双版本插件/模板",
      "path": "C:\Users\xxx\AppData\Roaming\kingsoft",
      "size": "约 4.4 GB",
      "content_profile": "WPS 中文版+国际版数据。wps/addons 2.2GB,wps_international/addons 1.9GB。",
      "why_manual": "涉及两个版本的共用数据,无法自动判断主要用哪版。",
      "disposal": "只用中文版:wps_international/addons 1.9GB 可安全删除。",
      "risk": "删除 wps_international 后国际版 WPS 启动时会重新下载插件。",
      "trash_paths": ["C:\Users\xxx\AppData\Roaming\kingsoft\wps_international"]
    }
  ],
  "red": [
    {
      "name": "MobileAppEngine(华为手机助手)",
      "path": "C:\Program Files\MobileAppEngine",
      "size": "约 7.6 GB",
      "why_keep": "7.4GB 为 EmulatorSdk Android 模拟器镜像。如果不用华为手机连电脑可卸载。",
      "indirect_release": "设置→应用→已安装的应用→搜索 MobileAppEngine→卸载。释放约 7.6GB。",
      "app_paths": ["C:\Program Files\MobileAppEngine"],
      "auto_reclaim": "否,需手动卸载"
    }
  ],
  "denied": [],
  "summary": {
    "overview": "C 盘仅剩 4.3GB,最大占用是华为手机助手 7.6GB + WPS 数据 4.4GB。可立刻释放约 1.8GB。",
    "tier_stats": {"green": "约 1.8 GB", "yellow": "约 15.0 GB", "red": "约 12.4 GB"},
    "priority": [
      "最优先:清除更新缓存 5 项约 1.8GB,零风险",
      "其次:清理 WPS 国际版插件 1.9GB"
    ],
    "long_term": [
      "启用存储感知:设置→系统→存储→存储感知→开",
      "定期 DISM:DISM /Online /Cleanup-Image /StartComponentCleanup",
      "大文件迁移至 D 盘:D 盘还有 218GB 可用"
    ]
  }
}

注意事项:

  • system 字段直接复制 scan.json 的 system,不要改动结构。
  • trash_paths 必须是真实存在的绝对路径数组,不能为空数组。
  • 🟡 项的 trash_paths 只放核实过安全可移的子路径(如旧备份目录),不是整个 path。
  • 🟡 项如果没有安全子路径,trash_paths 留空或不写。
  • commands[].cmd 写完整的可执行命令,用户可以直接复制到 PowerShell。

依赖

  • Python 3.10+ (纯标准库,零 pip install)
  • Windows 10 / 11(Windows 7 未测试)

平台状态

  • Windows 10/11:完整实现并实测(扫描/报告/一键删除全验证)。
  • 新增覆盖原版盲区:Installer、ProgramData、回收站、WinSxS、Windows Temp。

与原版 storage-analyzer 的差异

维度 原版 Windows 版
平台 macOS + Windows Windows only
扫描目标 7 组 (Win) 12 组 + dev_caches
macOS 代码 ~150 行 0 行
盲区 ~65 GB 已覆盖
--quick 模式 无 有
--cache 缓存 无 有
健康检查 无 GET /health
长路径处理 无 \? 前缀
回收站查询 无 Windows API
hiberfil/pagefile 未检测 已检测

长期建议(写入报告 long_term)

  • Windows 自带:cleanmgr(磁盘清理)、存储感知(设置→系统→存储)
  • DISM 清理:DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase
  • 第三方工具:WizTree(免费)、SpaceSniffer(免费)、TreeSize
  • 大文件迁移至 D/E 盘;休眠关闭:powercfg /hibernate off
  • 聊天软件缓存:微信/企微/钉钉定期在 App 内清理

更新日志

v2.0 — Windows-Native 重构 (2026-06-03)

基于原版 storage-analyzer (KKKKhazix/khazix-skills) 的完整逆向分析创建纯 Windows 实现。

修改动机:

  • 原版 307 行 scan.py 中 ~150 行是 macOS-only 逻辑,Windows 用户无需携带
  • 原版扫描盲区 ~65GB:Installer(31.5G) / ProgramData(4.7G) / 回收站(3.6G) / WinSxS(11.6G)
  • 3 个 Windows 特有 bug:stdout 缓冲、SHFileOperationW 长路径、后台服务无存活检测

改动清单:

类型 项目 优势
新增 5 个系统级扫描目标(Installer/ProgramData/回收站/WinSxS/Windows Temp) 扫描覆盖率从 ~35% 提升到 ~90%
新增 --quick 模式(0.2s 一级扫描 + 大文件自动聚合) 首轮反馈从 14s 降到 0.2s,用户零等待
新增 --cache 24h 缓存 + COMPUTERNAME 自动识别 二次扫描 <0.1s,消除重复扫描
新增 GET /health 健康检查 + 启动自检 服务存活可感知,启动失败立刻报错
新增 --min-mb 自定义阈值参数 大文件优先,用户可控粒度
新增 hiberfil.sys / pagefile.sys 系统文件检测 休眠/虚拟内存占用可见,不再遗漏
删减 砍掉全部 macOS 代码(~150 行) 代码量 -50%,Windows 专精,维护成本降低
修改 Frontmatter 四段式结构化(做什么/何时用/触发词/反触发) Agent 触发准确率提升,误触发减少
修改 Step 3 6 条可勾选检查清单 + ⏸️ 确认门 防止 Agent 跳过用户审查,分级结果必须用户同意
修改 9 场景异常处理表 边界条件全覆盖(Python 未安装/空扫描/磁盘满/权限拒绝等)
修改 11 种标签体系(含优先级链 + 互斥规则 + 正反例) 分类准确率提升,名称去歧义(应用本体→应用程序文件)
修改 附录 B 内联有效 JSON 模板(替代原版伪 JSON schema) Agent 零推理写分析 JSON,照抄结构即可
优化 Quick 模式 46 项→7 项(文件级自动聚合) 用户一屏看完,不再被 40 个 .msp 淹没
优化 约束规则一章合并(铁律+确认门+异常处理) 认知负荷 -60%,规则一次读完
优化 Agent/Script 职责对照表 一眼知谁负责哪个阶段
修复 os.path.isfile() → os.path.exists()(pagefile 检测) 系统文件不再漏检
修复 COMPUTERNAME → socket.gethostname() fallback 缓存文件名不再显示 "unknown"
修复 行缓冲 → sys.stdout.reconfigure(line_buffering=True) 后台启动输出即时可见
修复 \? 长路径前缀 + FOF_NOERRORUI 260 字符路径不丢失,错误弹窗抑制

原版 vs Windows 版性能:

指标 原版 Windows 版
Quick 扫描 — 0.2s
全量扫描 14.2s 9.3s
二次扫描(缓存命中) 14.2s <0.1s
扫描覆盖率 ~35% ~90%
Quick 模式 Top 条目 (无此模式) 7 项(聚合后)
macOS 代码 150 行 0 行

v2.1 — HTML 空白页修复 (2026-06-05)

修复报告 HTML 在浏览器中显示空白的致命问题。根因:JSON 数据注入 HTML 时,3 个崩溃点会导致整个 注入 JSON 中路径含 字符串 浏览器提前关闭 → ,u2028 → u2028,u2029 → u2029,彻底消除 JS 解析崩溃 build_report.py 新增 _warnings 注入数据 将结构验证警告传入模板,页面也能显示诊断提示 report_template.html 修复 amber→yellow / green_items→green 兼容 Agent 写 amber 不再导致数据丢失 report_template.html 修复 逐项字段补全 green/yellow/red 每一项缺失的字段自动填安全默认值(如 content_profile → "暂无内容画像"),不再显示 undefined 或空白 report_template.html 新增 mount 函数结构诊断 检测 green/yellow/red 全空、缺少 size_estimate、缺少 content_profile 等问题,页面顶部显示警告横幅 report_template.html 新增 build_report 警告透传 _warnings 数组中的验证警告也会在页面中显示 report_template.html 修复 catch 块增加调试信息 JS 解析失败时不再空白,显示错误详情和原始数据片段 server.py 修复 三重安全转义(同 build_report.py) 服务模式下也不会因 / u2028 崩溃 server.py 修复 amber→yellow 兼容 load() 函数自动将 amber 键重命名为 yellow

测试验证:

测试场景 结果
标准 JSON(完全匹配附录B模板) ✅ 正常渲染
不完美 JSON(amber 代替 yellow + red 缺必填字段) ✅ 有警告横幅但正常渲染,数据不丢失
极端最小 JSON(只有 system 字段,无 green/yellow/red) ✅ 优雅降级,页面显示警告而非空白
含 u2028/u2029 的 JSON ✅ 正确转义为 u2028/u2029,不再触发 JS 语法错误

v2.2 — 一键清理绿色项(确认面板 + 串行删除 + 进度反馈) (2026-06-05)

在交互式网页中增加"一键清理"功能:确认面板让用户勾选要清理的绿色项,确认后逐项串行删除并实时显示进度,失败项跳过继续,最后显示结果摘要。

交互流程:

点击"一键清理全部 N 项 (约 X GB)" → 弹出确认面板
  → 面板列出所有绿色项(复选框 + 名称 + 路径 + 大小)
  → 用户勾选/取消 → 点击"确认移到废纸篓"或"直接删除"
    → 逐项串行调用 /action API
      → 每完成一项:更新进度条 + 状态标记(✓/✗)
      → 某项失败?跳过继续,记录错误
    → 全部完成:显示结果摘要(成功 N 项 / 失败 M 项 + 失败原因)
  → 用户点"关闭"

改动清单:

文件 类型 项目 说明
report_template.html 新增 确认面板 UI(modal) 半透明遮罩 + 居中弹窗 + 复选框列表 + 全选/取消全选
report_template.html 新增 openBatchModal() 收集可清理绿色项,构建确认面板列表
report_template.html 新增 executeBatchClean(mode) async 串行逐项删除,实时更新进度条 + 状态标记
report_template.html 新增 进度条 + 结果摘要 进度条动画 + 成功(绿)/部分成功(黄)/失败(红) 三色结果面板
report_template.html 改进 绿色区醒目大按钮 原 btn-sm 改为 btn-lg,显示"🗑 一键清理全部 N 项 (约 X GB)"
report_template.html 新增 逐项状态 CSS batch-cleaning(清理中)、batch-ok(✓)、batch-fail(✗) 三种卡片状态
report_template.html 新增 点击遮罩关闭面板 点击 modal 外部遮罩区域自动关闭
report_template.html 改进 "直接删除"选项默认隐藏 需手动勾选"显示直接删除选项"才出现,防止误操作
report_template.html 新增 静态模式提示 静态报告模式下点一键清理,提示用户使用 server.py 启动服务模式

关键设计决策:

  1. 串行而非并行删除:避免并发请求导致文件锁冲突或服务端过载
  2. 失败跳过而非中止:某项权限不足时跳过继续,最后汇总失败列表
  3. 默认只显示"移到废纸篓":安全可逆;"直接删除"需额外勾选才可见
  4. 确认面板可取消勾选:用户可以精确选择要清理哪些项,而非全有或全无

v2.2.1 — 修复 SHFileOperationW 类型错误 (2026-06-05)

修复"一键清理"全部失败的 bug。根因:_to_wide_null_terminated() 返回 bytes(encode("utf-16-le")),但 SHFILEOPSTRUCTW.pFrom 声明为 wintypes.LPCWSTR,ctypes 期望 str 而非 bytes,导致每次移到废纸篓都报错 unicode string or integer address expected instead of bytes instance。

修复:

  • _to_wide_null_terminated() 返回 str 而非 bytes
  • 注释同步更新:说明 ctypes 会自动将 Python str 转为 UTF-16
  • 移除冗余的 import ctypes 语句(该函数不再需要 ctypes)
  • move_to_trash() 增加错误码 120/124 回退逻辑:系统保护目录(如 C:WindowsSoftwareDistributionDownload)或含被占用文件的目录无法移到回收站时,自动回退到 hard_delete(),避免清理失败
  • ALLOWED_ROOTS 新增 C:Program Files 和 C:Program Files (x86):修复 🔴 项"在资源管理器打开"时 L7 root boundary 拦截(如 C:Program FilesAutodesk)
  • report_template.html 修复 onclick 属性中 Windows 路径反斜杠丢失:esc(p).replace(/'/g,"\'") 增加 .replace(/\/g,'\\'),防止 JS 字符串中 P 被当作无效转义序列吞掉反斜杠(如 C:ProgramDataAutodesk 变成 C:ProgramDataAutodesk)

v2.3 — 设计级修复:JSON 解析方式 + 服务进程分离 (2026-06-05)

修复交互式网页始终显示为"静态模式"(DELETE = null)的根因问题,涉及两个独立 bug。

Bug 1:内联 JSON 赋值导致 JS 解析崩溃

因素 旧设计 新设计
数据注入方式 DATA = {json};(直接赋值) 转义
build_report.py 简化 转义逻辑 同上
SKILL.md 更新 Step 4 改用 Start-Process 启动 + 默认浏览器打开

相关专题

更多
Windows查看电脑主板信息合集
Windows查看电脑主板信息合集

本专题整合了Windows查看电脑主板信息相关内容,阅读专题下面的文章了解更多详细内容。

2026.03.25

144

13

Windows命令提示符
Windows命令提示符

本专题整合了Windows命令提示符相关操作教程,阅读专题下面的文章找到解决方法。

2026.03.24

194

26

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

2026.01.15

686

19

Windows快速搭建Java开发环境
Windows快速搭建Java开发环境

本专题整合了Windows中快速搭建Java开发环境教程,阅读专题下面的文章了解更多详细内容。

2025.10.24

441

7

windows更新被禁用怎么打开
windows更新被禁用怎么打开

开启被禁用的 Windows 更新:方法一:服务管理器中将其设置为自动启动并启动服务;方法二:Windows 设置中取消暂停更新;方法三:使用命令提示符启动 wuauserv 和 cryptSvc 服务并重启计算机。想了解更多相关内容,请阅读专题下面的文章。

2025.03.27

3642

12

windows副本不是正版怎么解决
windows副本不是正版怎么解决

此windows副本不是正版的解决办法:1、执行重新激活;2、使用命令提示符;3、调整服务设置;4、使用激活工具;5、更新系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.23

1479

6

windows打印机不打印的原因
windows打印机不打印的原因

windows打印机无法打印可能是由连接、驱动程序、打印机设置、文档、墨水耗尽、纸张或硬件故障引起的。想了解更多windows的相关内容,可以阅读本专题下面的文章。

2024.04.15

3374

10

windows驱动精灵作用
windows驱动精灵作用

Windows驱动精灵是一个免费的驱动程序管理工具,可帮助您轻松查找、下载和安装丢失或过时的驱动程序。想了解更多驱动精灵的相关内容,可以阅读本专题下面的文章。

2024.04.15

2978

11

linux与windows有哪些主要区别
linux与windows有哪些主要区别

linux和windows的主要区别有:1. 内核:linux使用开源内核,而windows使用专有内核;2. 许可证和成本:linux大多免费开源,而windows需要购买许可证等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.12

6389

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Conan 2 安装指南
Conan 2 安装指南

共0课时 | 0人学习