PikPak 云盘批量整理脚本:重命名、清小文件、拆目录
它解决什么
这是给 PikPak 网页端写的油猴脚本。PikPak 的网页界面只有基础的文件管理,批量重命名、批量清理、递归拆分这些操作都没有入口,脚本把这三件事补上。
云盘用久了会攒出三种烂摊子:
- 文件名乱七八糟,想按统一规则重排
- 一堆几百 KB 的封面、字幕、种子混在视频里
- 一层套一层的子文件夹,同一个东西散在五个目录
手动整理几千个文件不现实。这个脚本把这三件事做成了按钮:选中 → 扫描 → 预览 → 确认。
三个功能
批量重命名
选中文件或文件夹,扫描出文件名里的编号,按统一格式重排,还能补上关键词标签。扫描完先给预览,逐条确认后再执行,不会直接改。
清理小文件
递归扫完整个文件夹树,把所有小于 300MB 的普通文件挑出来,确认后批量移入回收站。
拆分子文件夹
同样递归扫描,把所有子文件夹里的文件搬到最外层,空目录顺手删掉。同名文件自动跳过,不覆盖。
实现上的几个点
单文件,没有构建步骤
95KB 一个 .user.js,里面是 Preact + htm:
1
2
3
const { h, render } = preact;
const { useState, useEffect } = preactHooks;
const html = htm.bind(h);
htm 让 JSX 写法直接变成模板字符串,不需要 Babel 或打包器。三个库从 @require 走 CDN 引入。对 userscript 来说这是很实用的选择——用户装的是单个文件,不是 dist 目录。
批量接口 + 自己限流
云盘 API 提供 files:batchTrash 和 files:batchMove,一次能处理多个 ID。但脚本没有一把梭全推上去,而是分批:
1
2
3
4
for (let i = 0; i < targets.length; i += 5) {
await Promise.all(batch.slice(0, 5).map(fn));
if (i + 5 < targets.length) await delay(1000);
}
每批 5 个、批间隔 1 秒。这个节奏是被服务端教出来的——并发太高会直接 429,反而更慢。
冲突检测只能自己做
batchMove 不会因为目标目录有同名文件就拒绝,可能直接覆盖。所以脚本在移动之前先把整棵树的文件名收集起来做比对:
1
2
3
4
const scanNestedFolders = async (folder, parentGroup, reservedNames, lineage) => {
// 递归收集,遇到同名就 push 到 group.conflicts
parentGroup.conflicts.push({ file, fromFolder: folder, pathLabel });
};
冲突的单独列出来给用户看,正文说明「跳过 N 个冲突文件」。
这条比功能本身重要:批量操作最怕的不是慢,是不可逆的覆盖。
先出计划,再执行
三个功能都是两段式。扫描阶段只读,把要做的事整理成一份计划(哪些重命名、哪些移动、哪些删除、哪些跳过),用户在弹窗里看完才点确认。
代码里对应的状态是 cleanupTargets、flattenPlan 这类,执行函数 performAction 只在确认之后被调用。
安装
一、装脚本管理器
先在浏览器装一个 userscript 管理器:
| 浏览器 | 装什么 | 从哪装 |
|---|---|---|
| Chrome / Edge | Tampermonkey | 浏览器应用商店搜「Tampermonkey」 |
| Firefox | Tampermonkey | Add-ons 搜「Tampermonkey」 |
| Safari | Userscripts | App Store,然后在设置里启用扩展 |
二、装脚本
打开脚本文件地址:
1
https://github.com/poisonhs/pikpak-assistant/blob/main/PikPak%20Assistant.user.js
点右上角的 Raw 按钮。Tampermonkey 会拦截这个文件并弹出安装页面,点「安装」就完成了。
如果没弹窗,可能是管理器没开「允许访问文件网址」,或者扩展被禁用。也可以手动装:
- 点 Tampermonkey 图标 → 添加新脚本
- 把
PikPak Assistant.user.js的全部内容粘贴进去,覆盖模板 Ctrl + S保存
三、打开 PikPak 并登录
脚本匹配三个域名,任意一个都行:
mypikpak.commypikpak.netpikpak.me
登录后刷新页面,脚本面板会出现。选中文件或文件夹,三个功能按钮就在面板里。
如果你已经打开着页面,装完脚本要刷新一次,内容脚本才会注入。
脚本声明了 GM_xmlhttpRequest 和 @connect,所以能跨域访问云盘 API 和几个元数据站点补全文件信息。
用之前注意
删除和移动是真实执行的。 脚本有预览,但确认之后就是真删真移。回收站能救一部分,但别指望。
建议先拿一个不重要的文件夹试一遍,确认重命名规则、大小阈值、目录结构都符合预期,再上大目录。
另外小文件清理的阈值写死 300MB,如果你的文件普遍偏小,扫出来会误伤——这种情况先看预览列表,别直接确认。
写在最后
这类工具的价值不在功能多,在它把「批量」拆成了「计划 + 确认」两步。直接对着几千个文件执行删除和重命名,出事一次就够了。