微信文件去重清理技能
安全原则
- 必须在操作前获取用户输入的精确目录路径(格式如
C:\Users\用户名\xwechat_files\wxid\msg\file\2026-04) - 禁止自动推测或猜测路径,即使用户说"清理微信文件"也必须询问具体路径
- 所有删除操作均为永久删除(调用系统方式直接删除,不放入回收站)
检测重复文件的规则
在用户指定的目录下扫描所有文件,按以下两个条件判断是否为同一个文件的多次下载:
- 文件名高度一致 — 基础名称相同,仅末尾有
(1)、(2)、(3)...等中文括号数字后缀 - 文件大小完全一致
示例匹配组:
example.pdf → 保留
example (1).pdf → 删除
example (2).pdf → 删除
处理逻辑
对每个重复文件组执行以下步骤:
- 根据修改时间确定最新版本(mtime 最大的文件)
- 将最新版本重命名,移除末尾的编号后缀
(N)
-example (3).pdf→example.pdf
-image (1) (2).png→image.png(需递归去除所有末尾的(数字)模式) - 永久删除同组中的其他文件
清理前预览
每次执行删除操作必须先输出完整的预览报告,格式如下:
📁 目录: {用户指定的路径}
📄 扫描到 N 个文件
🔍 发现 M 组重复文件(涉及 K 个副本)
--- 重复文件详情 ---
1. example.pdf (共 3 个副本)
✅ 保留: example.pdf | 2.5 MB | 修改时间: 2026-04-15 14:30
🗑️ 删除: example (1).pdf | 2.5 MB | 修改时间: 2026-04-10 09:15
🗑️ 删除: example (2).pdf | 2.5 MB | 修改时间: 2026-04-12 16:45
2. report.pdf (共 2 个副本)
✅ 保留: report.pdf | 1.2 MB | 修改时间: 2026-04-18 11:00
🗑️ 删除: report (1).pdf | 1.2 MB | 修改时间: 2026-03-25 08:30
--- 统计 ---
📦 将清理的文件数: K-1
💾 预计释放空间: X MB
预览后等待用户确认,只有在用户明确同意后才执行实际的删除操作。
实现方式
使用 Python 脚本处理文件扫描和去重逻辑,脚本位于 scripts/dedup.py。
脚本已优化,支持:
- 中英文括号数字后缀识别:(1)、(2)、(1)(2) 等
- Windows 控制台 UTF-8 编码兼容
- 文件大小精确匹配(避免误删)
- 修改时间排序(保留最新版本)
- 先删除后重命名:避免目标文件名被占用导致重命名失败
- 详细的执行结果统计(成功/失败计数)
运行方式:
python scripts/dedup.py "C:\Users\Liang\xwechat_files\...\msg\file\2026-04"
脚本核心逻辑:
1. 扫描目录下所有文件,提取文件名基准(去除 (N) / (N) 后缀)
2. 按 (基准名, 文件大小) 分组,筛选出重复组
3. 按修改时间排序,保留最新文件
4. 先删除其余副本文件
5. 再重命名保留文件为无后缀的基础文件名
6. 输出详细的执行结果统计
使用方式
-
调用
exec运行 Python 脚本:
bash python <skill_path>/scripts/dedup.py "C:\Users\Liang\xwechat_files\...\msg\file\2026-04" -
将输出结果展示给用户,等待确认后再执行。
注意事项
- 不要使用
trash——技能明确要求永久删除(微信重复文件是临时缓存性质) - 如果目录下没有可写的文件或路径不存在,向用户说明情况而非尝试猜测替代路径
- 如果目录为空或无重复文件,优雅地通知用户"无需清理"