WorkBuddy 搬家助手
把 WorkBuddy 的「人」(记忆、身份、技能、专家、MCP、自动化、插件状态)和「事」(会话记录、项目、任务、业务文件)整体打包、还原、迁移。
> 作品标识 WBMOVER-RA-2026-7F3A9C · 作者 reda123001 · 保留所有权利,详见同级 LICENSE.md。
什么时候用
| 用户意图 | 动作 |
|---|---|
| 要重装 Windows / 换电脑,怕数据丢 | 先 Backup,重装后 Restore |
C 盘告急,想把 .workbuddy 挪到 D/F 盘 |
Relocate(带双保险,可回退) |
| 怀疑备份不完整 / 恢复后不对劲 | Verify |
| 要把备份发给别人或存网盘 | Zip |
| 恢复后界面空白、会话丢失、数据库报错 | 见 references/故障排查.md |
铁律(违反会丢数据,务必遵守)
- 绝不用
robocopy /MOVE、绝不做"先删后拷"。一律完整复制 → 核对 → 再切换 → 按用户勾选处理旧目录。 - 切换前必须核对文件数与体积。
Invoke-Relocate会自己做,比对不一致返回退出码2。 - 旧数据默认保留(改名为
.workbuddy.旧数据_yyyyMMdd-HHmmss),只有用户明确要求才加-DeleteOld。 - 操作真实目录前先跑
-DryRun演练,把计划打印给用户看,等确认。 - 本 skill 的脚本会被宿主进程注入的环境变量影响。测试时若宿主已设
WORKBUDDY_CONFIG_DIR,用-Root显式指定隔离目录,否则会动到真实数据。 - 恢复会覆盖同名文件。恢复前提醒用户先做一次当前状态的备份。
脚本位置(自动适配搬家前后)
脚本随 skill 目录走,两条路径都可用:
# 优先跟随当前数据根(搬家后自动指向新盘),否则回落到用户目录
$Root = $env:WORKBUDDY_CONFIG_DIR
if (-not $Root) { $Root = Join-Path $env:USERPROFILE '.workbuddy' }
$SkillPs1 = Join-Path $Root 'skills\workbuddy-mover\scripts\wb_backup_restore.ps1'
在实际执行时直接用绝对路径即可(C 盘 .workbuddy 是目录联接,同样可通):
C:\Users\Administrator\.workbuddy\skills\workbuddy-mover\scripts\wb_backup_restore.ps1
F:\WorkBuddyDATA\skills\workbuddy-mover\scripts\wb_backup_restore.ps1
动作速查
$ps1 = 'C:\Users\Administrator\.workbuddy\skills\workbuddy-mover\scripts\wb_backup_restore.ps1'
# 1) 备份(默认输出到 D:\WorkBuddy_Backup\WorkBuddy备份_<时间戳>)
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Backup -Yes
# 业务文件也要备份(可多个,分号分隔)
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Backup -Yes -Workspace "F:\项目目录;D:\资料"
# 2) 恢复(-Source 指备份目录;建议先 -DryRun)
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Restore -Source "D:\WorkBuddy_Backup\WorkBuddy备份_20261023-223840" -DryRun
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Restore -Source "..." -Yes
# 3) 校验备份完整性(文件数 + 体积 + SHA256)
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Verify -Source "..."
# 4) 打包成 ZIP
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Zip -Source "..."
# 5) 搬家:把数据目录迁到其他盘(默认建环境变量 + 目录联接,旧数据保留)
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Relocate -Target "F:\WorkBuddyDATA" -DryRun
powershell -NoProfile -ExecutionPolicy Bypass -File $ps1 -Action Relocate -Target "F:\WorkBuddyDATA" -Yes
# 核对一致后再删旧:加 -DeleteOld;不想动 C 盘路径只设环境变量:加 -NoJunction
无参数双击运行 -Action Menu 会进交互菜单:[1]备份 [2]恢复 [3]校验 [4]打包ZIP [5]搬家 [6]打开备份目录 [0]退出。
退出码
| 码 | 含义 | 处置 |
|---|---|---|
| 0 | 成功 | — |
| 2 | 搬家比对不一致,已自动回退 | 检查磁盘空间/权限,重试;必要时人工核对 |
| 其他 | 失败 | 看控制台最后 20 行错误 |
搬家的双保险原理
- 用户级环境变量
WORKBUDDY_CONFIG_DIR(HKCU)——官方resolveConfigDir()的第一优先级。 - C 盘原路径建目录联接(Junction)——防某些子进程只认
homedir()/.workbuddy。 - 删除联接必须用不带递归的
[System.IO.Directory]::Delete($path, $false),否则会删到目标盘的真实数据。
脚本内所有联接删除统一走Remove-JunctionSafe:先确认是重解析点,再非递归移除;不是联接就拒绝删。
> 二次搬迁(默认路径已是联接、但指向另一块盘)是最危险的场景。1.1.1 起此分支只摘链接、数据不动,
> 移除失败则中止切换并报错,不会带着旧链接继续往下走。
备份范围排除 binaries app logs traces cache workspace browser-runtime(安装包可重建)。
更多
- 故障与事故复盘(含损坏
workbuddy.db的抢救流程):references/故障排查.md - 完整用户手册:仓库
README使用说明.md - 图形界面:仓库 Releases / 本地
WorkBuddy数据搬家助手.exe(可勾选保留或删除旧数据、比对不一致时弹窗询问是否回退)