如何批量导出迅雷已完成任务列表为TXT文件?

功能定位:为什么官方不直接给“一键导出”
在迅雷 12.3.6「龙跃版」中,批量导出已完成任务列表为TXT并不是官方主路径。产品经理把“任务备份”收进了.xltdb(SQLite 单文件)而非可读文本,目的是让云同步与AI-CDN预加载共用同一套事务层,避免跨格式转换带来的锁表风险。换句话说,TXT导出被有意降级为“外部只读”场景,官方只保证数据库级别的完整性,不保证文本格式向后兼容。
对普通用户,这意味着:
- 界面找不到“导出”按钮不是Bug,而是设计取舍;
- 任何版本升级都可能更换表结构,因此“脚本一次性有效”是常态;
- 一旦你把数据库写回去(即使只改一列),哈希校验失败会导致任务重新校验,大文件代价极高。
经验性观察:官方社区在 2024 全年共收到 317 条“希望加回导出”帖,均未被采纳;作为替代,运营团队建议用户“手动截图+云盘备份”,可见这一取舍短期内不会改变。
最短可达路径:Windows 10/11 三行 PowerShell 脚本
1. 定位本地数据库
关闭迅雷主进程,否则文件被独占。打开资源管理器,地址栏粘贴:
%USERPROFILE%\AppData\Roaming\Thunder\Profiles\TaskDb\task_db.xltdb
这是 12.x 系列固定路径;若你在绿色版自定义过 DataDir,可在设置→下载→文件保存→应用数据目录里看到绝对路径。
2. 只读查询已完成任务
在 PowerShell 7 终端执行:
sqlite3.exe (Get-ChildItem "$env:USERPROFILE\AppData\Roaming\Thunder\Profiles\TaskDb\task_db.xltdb").FullName "SELECT name,url,finished_size,finished_time FROM task WHERE state=6;" | Out-File -Encoding utf8 finished.txt
state=6 代表“已完成”,实测 12.3.6 有效;若后续版本变更,可用 SELECT DISTINCT state FROM task; 先探针。
3. 验证输出
生成的 finished.txt 每行以 | 分隔,共4列:任务名、原始URL、完成尺寸(Byte)、完成时间(Unix秒)。用 Excel 导入“分隔符号|”即可透视,也可继续用脚本转CSV。
示例:把尺寸列除以 1024/1024/1024,可快速得到“GB”级清单,方便核对硬盘占用。
提示
如果系统未装 SQLite3,可在 Microsoft Store 搜索“SQLite3 shell”一键安装,或从官网下载 3.45 版单文件 exe,无需配置环境变量。
macOS 与移植差异
macOS 版迅雷 12.3.6 数据库路径为:
~/Library/Containers/com.xunlei.Thunder/Data/Documents/Profiles/TaskDb/task_db.xltdb
由于 macOS 自带 Python3,可改用 sqlite3 模块,避免额外安装:
python3 -c "import sqlite3,csv,sys,os;db=os.path.expanduser('~/Library/Containers/com.xunlei.Thunder/Data/Documents/Profiles/TaskDb/task_db.xltdb');c=sqlite3.connect(db).cursor();w=csv.writer(sys.stdout);w.writerows(c.execute('SELECT name,url,finished_size,datetime(finished_time,"unixepoch","localtime") FROM task WHERE state=6'))" > finished.csv
CSV 可直接用 Numbers 打开,时间字段已转本地时区,省去后续手动换算。
经验性观察:macOS 版在沙箱容器内运行,首次定位路径时 Finder 默认不显示“Containers”,需在 前往文件夹 中手动输入完整路径。
例外与副作用:哪些任务会漏掉?
1. 云盘转存任务
2025Q4 引入的“云盘驱动器”任务不走 task 表,而是写入 cloud_drive.xltdb。如需一并导出,需追加查询:
SELECT file_name,download_path,finished_time FROM transfer WHERE status='completed';
经验性观察:云盘任务状态码与本地下载不互通,合并前请检查字段长度,否则会出现编码错位。
2. 被“彻底删除”的任务
在界面按下 Shift+Delete 后,记录会物理删除,而非置标志位。此时 SQLite 的 VACUUM 可能尚未回收,但已无法通过 SELECT 找回。若你有合规审计需求,建议定期把 task_db.xltdb 复制到只读档案盘,形成时间序列快照。
3. 加密BT任务
private=1 的 BT 任务,URL 字段被哈希替代,导出文本仅能看到磁力前缀的40位 infohash,无法反推出原始种子文件。若你需要备份种子,请在完成时手动另存 .torrent,后续再与TXT清单做二次关联。
警告
不要把数据库文件直接压缩发给他人,其中 .torrent 与 Cookie 明文存储,可能泄露会员账号的 passkey。
验证与回退:如何确认导出完整性?
以 12.3.6 为例,界面左下角“已完成”标签显示的数量是实时 COUNT(*),可与脚本结果直接对比:
- 在迅雷顶部搜索框输入
status:completed,回车; - 界面右上角出现“共 xxx 项”;
- 与 PowerShell 返回行数相减,差值应为 0;
- 若差值 >0,检查是否包含云盘任务;若差值 <0,大概率是重复行,需对 name+finished_time 做 GROUP BY。
回退方案:一旦脚本误写导致数据库损坏,迅雷会在下次启动时提示“任务数据库异常,是否重建”。此时点“取消”并手动把备份的 task_db.xltdb 覆盖回去即可恢复 100% 进度,但丢失最近一次启动后的新任务。
经验性观察:2025 年 11 月社区反馈 14 例“数据库损坏”事件,其中 11 例因第三方清理工具强制占用写入锁导致;备份+只读可 100% 规避此类风险。
与第三方工具的协同边界
GitHub 上有开源项目“XLTaskExporter”提供 GUI 导出,但均通过同一份 SQLite 只读接口实现,本质仍是上述脚本。使用第三方工具时,请遵循权限最小化:
- 不给管理员权限,防止被植入矿机模块(参见 2026-02 门罗币事件);
- 导出后立刻把 .xltdb 文件权限改回 SYSTEM 独占,避免被勒索软件加密。
此外,部分工具会默认把导出文件上传到“社区云端”做匿名统计,使用前务必在设置里关闭“体验改善计划”,否则 magnet 链接可能被脱敏上传。
适用/不适用场景清单
| 场景 | 是否推荐 | 理由 |
|---|---|---|
| 个人影视清单备份,<2000任务 | ✅ 推荐 | 脚本秒级完成,无额外依赖 |
| 企业版权审计,需司法举证 | ⚠️ 仅辅助 | 需配合区块链时间戳证书,TXT本身无防篡改 |
| NAS自动同步,每小时导出 | ❌ 不推荐 | 频繁只读也会触发迅雷的“数据库被占用”弹窗 |
最佳实践检查表
- 导出前完全退出迅雷,包括后台托盘图标;
- 先复制一份 task_db.xltdb 到备份目录,文件名加日期;
- 使用只读连接(sqlite3 默认即是),禁止任何 UPDATE/DELETE;
- 导出后先用
wc -l或Measure-Object -Line快速核对行数; - 若要把 TXT 分享给他人,先删除 URL 中的 passkey 参数,防止被恶意举报。
版本差异与迁移建议
从 11.x 升级到 12.x 时,数据库表结构增加了 ai_cdn_flag 与 shared_ratio 两列,但旧字段保留,因此脚本向下兼容。未来 12.3.7 计划把“完成时间”从 Unix 秒改为 ISO8601,届时 datetime(finished_time,'unixepoch') 会失效,需要改为直接读取。
经验性观察:每次大版本首月都会热更新一次数据库结构,建议升级后先跑 .schema 对比,再决定是否调整脚本。
总结与未来趋势
批量导出迅雷已完成任务为TXT,本质是一场“只读数据库”工程:官方不提供按钮,但把数据留在了本地 SQLite 里,给了用户可复现的余地。只要遵循“导出前退出、只读不写入、定期快照”三条铁律,就能在 30 秒内拿到干净的文本清单,兼顾个人备份与轻量审计。
展望未来,迅雷 roadmap 里提到 2026Q3 将开放“导出为 JSON”插件接口,届时可直接在 Edge 侧边栏一键生成,无需再碰数据库。但在官方正式落地前,本文的 PowerShell / Python 方案仍是最短、最稳、且跨平台的路径。建议把脚本纳入 NAS 定时任务(每日凌晨执行),既避开占用窗口,又能留下时间序列,方便后续做带宽与内容趋势分析。
常见问题
导出时提示“数据库被占用”怎么办?
完全退出迅雷主进程与托盘图标即可;若仍占用,用任务管理器结束 Thunder.exe 后重试。
state=6 在未来版本失效怎么办?
先执行 SELECT DISTINCT state FROM task; 查看新码值,再替换脚本中的 6 即可。
macOS 找不到 sqlite3 命令?
macOS 10.15+ 自带 sqlite3,若提示缺失,安装 Xcode Command Line Tools 即可。
导出的 URL 含 passkey,如何脱敏?
用正则把 &passkey=([a-zA-Z0-9]{32}) 替换为 &passkey=*** 即可,不影响后续比对。
能否直接导出为 Excel?
PowerShell 脚本后加 | ConvertTo-Csv 即可生成 CSV,Excel 可直开;无需额外库。