WorkBuddy 卸载重装+数据迁移全记录:用 Junction 解决工作空间路径锁定问题
本文记录了将 WorkBuddy 工作空间和全局配置从 C 盘迁移到 D 盘的完整过程,包括卸载重装、目录联接(Junction)方案、以及中途遇到的各种"坑"和解决方案。
适用于:WorkBuddy 重装后需要恢复数据、或想把数据迁移到其他盘符的用户。
一、背景
WorkBuddy 用了一段时间后,C 盘空间吃紧。看了看 WorkBuddy 的数据分布:
- 工作空间目录(项目文件、记忆、自动化配置等):在
C:\Users\用户名\WorkBuddy\下 - 全局配置目录(SOUL.md、MEMORY.md、插件、二进制文件等):在
C:\Users\用户名\.workbuddy\下,光插件和运行时就有 500+ MB
目标:把这两块数据全部迁移到 D 盘,释放 C 盘空间。
二、备份
2.1 复制工作空间
robocopy "C:\Users\用户名\WorkBuddy\Claw" "D:\WorkBuddy\Claw" /E /COPYALL2.2 复制全局配置
robocopy "C:\Users\用户名\.workbuddy" "D:\WorkBuddy\.workbuddy" /E /COPYALL注意:复制时如果有文件被锁定跳过(比如 Cookies),不影响核心功能,重启后会自动生成。
2.3 验证备份
确认 D 盘以下关键文件存在:
- 工作空间:项目文件、
.workbuddy/目录(含automations-registry.json、memory/等) - 全局配置:
MEMORY.md、SOUL.md、IDENTITY.md、USER.md
三、卸载重装
正常卸载 WorkBuddy,然后重新安装。
安装路径选哪里都行——程序本体和数据是分离的,只要后面 Junction 配好,数据全在 D 盘。
四、核心问题:无法切换工作空间路径
重装后启动 WorkBuddy,发现工作空间还是默认指向 C 盘原路径,而且应用内没有"切换工作空间目录"的操作入口。
试了各种方法:设置界面、配置文件、命令行参数……都找不到切换路径的地方。
这就是本次迁移最大的障碍。
五、解决方案:目录联接(Junction)
5.1 原理
既然不能让 WorkBuddy 去读 D 盘,那就让C 盘路径自己指向 D 盘。
Windows 的mklink /J可以创建目录联接(Junction),让系统以为文件在 C 盘,实际读写都走 D 盘。对 WorkBuddy 完全透明,不需要改任何配置。
mklink /J "C盘原路径" "D盘实际数据"Junction vs Symbolic Link:
mklink /J(Junction):不需要管理员权限,兼容性更好,推荐mklink /D(Symbolic Link):需要管理员权限
5.2 最终需要的 Junction 结构
| C 盘路径 | → | D 盘实际数据 | 说明 |
|---|---|---|---|
C:\Users\用户名\WorkBuddy | → | D:\WorkBuddy | 工作空间(项目文件等) |
C:\Users\用户名\.workbuddy | → | D:\.workbuddy | 全局配置 |
为什么全局配置放在
D:\.workbuddy而不是D:\WorkBuddy\.workbuddy:让两条 Junction 路径完全独立,不重叠,避免父子级 Junction 嵌套问题。
六、操作过程(含踩坑实录)
第 1 步:创建工作空间 Junction
mklink /J "C:\Users\用户名\WorkBuddy\Claw" "D:\WorkBuddy\Claw"这一步比较顺利,直接创建成功。
后续优化:改为创建父级 Junction
C:\Users\用户名\WorkBuddy→D:\WorkBuddy,这样Claw子目录自动解析,不需要单独的子 Junction。但这一步需要先删除子 Junction,详见后面的踩坑。
第 2 步:创建全局配置 Junction
mklink /J "C:\Users\用户名\.workbuddy" "D:\.workbuddy"🕳️ 坑 1:WorkBuddy 运行时不断重建 .workbuddy 目录
现象:删除C:\Users\用户名\.workbuddy后,WorkBuddy 进程立即重建该目录,删除跟不上重建速度,无法创建 Junction。
原因:WorkBuddy 运行时会持续向.workbuddy写入文件(插件下载、缓存等)。
解决方案:先重命名旧目录,再创建 Junction,最后删除旧目录:
ren "C:\Users\用户名\.workbuddy" ".workbuddy_old" mklink /J "C:\Users\用户名\.workbuddy" "D:\.workbuddy" rmdir /S /Q "C:\Users\用户名\.workbuddy_old"ren是瞬间完成的,WorkBuddy 还没来得及重建就已经改名了。
第 3 步:合并为父级 Junction(简化结构)
最初创建的是C:\Users\用户名\WorkBuddy\Claw→D:\WorkBuddy\Claw的子 Junction。后来想简化为父级 Junction:C:\Users\用户名\WorkBuddy→D:\WorkBuddy,这样Claw会自动解析,不需要单独的 Junction。
🕳️ 坑 2:工作空间目录被进程锁定
现象:rmdir "C:\Users\用户名\WorkBuddy\Claw"提示"另一个程序正在使用此文件",ren也失败。
原因:Claw是当前 WorkBuddy 的工作空间目录,进程持续占用。
解决方案:必须完全关闭 WorkBuddy(包括 VS Code 窗口和系统托盘图标),然后在外部执行。
🕳️ 坑 3:关闭 WorkBuddy 后仍残留空目录
现象:关闭 WorkBuddy 后,Claw变成空目录(之前的 Junction 被删了但 WorkBuddy 重建了空目录),rmdir可以删除。
解决方案:创建.bat脚本,关闭 WorkBuddy 后以管理员身份运行:
@echo off echo === 开始修复 Junction === echo [1/4] 删除旧的子 Junction / 空目录... rmdir "C:\Users\用户名\WorkBuddy\Claw" 2>nul echo [2/4] 删除空的 WorkBuddy 目录... rmdir "C:\Users\用户名\WorkBuddy" 2>nul echo [3/4] 创建父级 Junction: WorkBuddy -^> D:\WorkBuddy mklink /J "C:\Users\用户名\WorkBuddy" "D:\WorkBuddy" if errorlevel 1 ( echo *** 错误:Junction 创建失败!请检查 WorkBuddy 是否已完全关闭。 pause exit /b 1 ) echo [4/4] 验证... dir "C:\Users\用户名\WorkBuddy\Claw" >nul 2>&1 if errorlevel 1 ( echo *** 验证失败:无法通过 Junction 访问 Claw 目录 pause exit /b 1 ) echo. echo === 全部完成!=== echo Junction 结构: echo C:\Users\用户名\WorkBuddy -^> D:\WorkBuddy echo C:\Users\用户名\.workbuddy -^> D:\.workbuddy echo. echo 请重新启动 WorkBuddy。 pause操作步骤:
- 完全关闭 WorkBuddy
- 找到
.bat脚本,右键 → 以管理员身份运行 - 看到
全部完成!后重启 WorkBuddy
七、恢复后验证
重启 WorkBuddy 后,执行 4 项验证:
| 验证项 | 方法 | 结果 |
|---|---|---|
| 项目文件读取 | 对话中说"看下持仓表"等指令 | ✅ 文件正常读取 |
| 全局记忆生效 | 检查 SOUL.md / MEMORY.md 内容 | ✅ 配置完整 |
| 自动化任务重建 | 对话中说"重建自动化调度" | ✅ 从 JSON 注册表重建全部调度 |
| 数据查询可用 | 执行依赖 Python 环境的功能 | ⚠️ 需补装依赖(见下) |
🕳️ 坑 4:Python 依赖缺失
现象:重装后 Python 环境是干净的,import tushare报ModuleNotFoundError。
原因:卸载重装后 Python 环境被重置,之前pip install的包都没了。
解决方案:
pip install tushare八、自动化调度重建
WorkBuddy 的自动化调度(定时任务)存储在项目的.workbuddy/automations-registry.json中。重装后需要手动触发重建:
- 在对话中输入:
重建自动化调度 - WorkBuddy 读取 JSON 注册表,自动重建全部调度
- 工作目录(cwds)会自动适配为当前路径
🕳️ 坑 5:RRULE 格式不兼容
现象:部分调度创建失败,提示 RRULE 格式错误。
原因:WorkBuddy 的自动化系统不支持BYMONTH、BYMONTHDAY、YEARLY等 RRULE 字段,也不支持BYSECOND。
解决方案:
- 不支持的频率改为
FREQ=DAILY,在 prompt 首行加入日期判断逻辑(非目标日期直接跳过) - 移除所有
BYSECOND - 功能行为不变,只是触发频率从"精确日期"变成"每天触发但自动跳过"
九、最终架构
C盘(Junction,对应用透明) D盘(实际数据) ───────────────────────── ───────────────────────── C:\Users\用户名\WorkBuddy\ ──→ D:\WorkBuddy\ └── Claw\(工作空间) └── Claw\(项目文件+记忆+配置) └── .workbuddy\ ├── automations-registry.json └── memory\ ├── MEMORY.md └── YYYY-MM-DD.md C:\Users\用户名\.workbuddy\ ──→ D:\.workbuddy\ ├── SOUL.md ├── SOUL.md ├── MEMORY.md ├── MEMORY.md ├── IDENTITY.md ├── IDENTITY.md ├── USER.md ├── USER.md ├── binaries\(491 MB) ├── binaries\ ├── plugins\(53 MB) ├── plugins\ └── skills-marketplace\(43 MB) └── skills-marketplace\C 盘释放约 575 MB 空间,所有数据实际存储在 D 盘。
十、经验总结
10.1 核心原则
- 先备份再操作:复制到 D 盘后验证完整性,确认无误再删除 C 盘
- Junction 优于符号链接:
mklink /J不需要管理员权限,兼容性更好 - 关闭应用再操作:WorkBuddy 运行时会锁定工作空间目录和持续重建配置目录,必须完全关闭后再创建 Junction
- 两条 Junction 独立:工作空间和全局配置放在不同的 D 盘路径下,避免路径嵌套问题
10.2 遇到的 5 个坑
| # | 问题 | 根因 | 解决方案 |
|---|---|---|---|
| 1 | 无法切换工作空间路径 | 应用内无此入口 | 用 Junction 让 C 盘路径指向 D 盘 |
| 2 | .workbuddy 目录删不掉 | WorkBuddy 运行时持续重建 | ren重命名旧目录 → 创建 Junction → 删除旧目录 |
| 3 | 工作空间目录锁定 | WorkBuddy 进程占用 | 关闭 WorkBuddy → 运行 .bat 脚本 → 重启 |
| 4 | Python 依赖缺失 | 重装后环境干净 | pip install补装 |
| 5 | RRULE 格式不兼容 | 自动化系统不支持部分字段 | 改用 DAILY + prompt 日期判断 |
10.3 给后来者的建议
- 备份用 robocopy:
/E /COPYALL保证完整性,比手动复制可靠 - 验证再删除:D 盘备份验证通过后再动 C 盘,别提前删
- 准备一个 .bat 脚本:WorkBuddy 运行时锁定的目录只能关闭后操作,提前写好脚本一次搞定
- 记下自动化调度注册表:
automations-registry.json是调度的"种子文件",有了它随时可以重建 - 先装依赖再验证:重装后 Python 依赖会丢,先
pip install补装再测试功能
附:完整操作脚本
将以下内容保存为migrate_workbuddy.bat,修改用户名后,在完全关闭 WorkBuddy 的情况下以管理员身份运行:
@echo off chcp 65001 >nul echo ======================================== echo WorkBuddy 数据迁移工具 (Junction) echo ======================================== echo. REM ====== 配置区(按需修改) ====== set USERNAME=你的用户名 set WORKBUDDY_C=C:\Users\%USERNAME%\WorkBuddy set WORKBUDDY_D=D:\WorkBuddy set DOTWORKBUDDY_C=C:\Users\%USERNAME%\.workbuddy set DOTWORKBUDDY_D=D:\.workbuddy REM ================================= echo [1/8] 删除工作空间子目录(如存在)... rmdir "%WORKBUDDY_C%\Claw" 2>nul rmdir "%WORKBUDDY_C%" 2>nul echo [2/8] 创建工作空间 Junction... mklink /J "%WORKBUDDY_C%" "%WORKBUDDY_D%" if errorlevel 1 ( echo *** 错误:工作空间 Junction 创建失败! echo 请确认 WorkBuddy 已完全关闭(包括系统托盘)。 pause exit /b 1 ) echo [3/8] 验证工作空间 Junction... dir "%WORKBUDDY_C%\Claw" >nul 2>&1 if errorlevel 1 ( echo *** 验证失败:无法通过 Junction 访问工作空间 pause exit /b 1 ) echo 工作空间 Junction 验证通过。 echo. echo [4/8] 删除旧的全局配置目录(如存在)... rmdir "%DOTWORKBUDDY_C%" 2>nul if exist "%DOTWORKBUDDY_C%" ( echo 目录仍存在,尝试重命名... ren "%DOTWORKBUDDY_C%" ".workbuddy_old" 2>nul ) echo [5/8] 创建全局配置 Junction... mklink /J "%DOTWORKBUDDY_C%" "%DOTWORKBUDDY_D%" if errorlevel 1 ( echo *** 错误:全局配置 Junction 创建失败! pause exit /b 1 ) echo [6/8] 验证全局配置 Junction... dir "%DOTWORKBUDDY_C%\SOUL.md" >nul 2>&1 if errorlevel 1 ( echo *** 验证失败:无法通过 Junction 访问全局配置 pause exit /b 1 ) echo 全局配置 Junction 验证通过。 echo. echo [7/8] 清理重命名的旧目录(如存在)... if exist "C:\Users\%USERNAME%\.workbuddy_old" ( rmdir /S /Q "C:\Users\%USERNAME%\.workbuddy_old" 2>nul ) echo. echo ======================================== echo 全部完成! echo ======================================== echo. echo Junction 结构: echo %WORKBUDDY_C% -^> %WORKBUDDY_D% echo %DOTWORKBUDDY_C% -^> %DOTWORKBUDDY_D% echo. echo 请重新启动 WorkBuddy,然后输入"重建自动化调度"。 echo. pause本文记录于 2026-07-04,基于 WorkBuddy 实际迁移操作整理。不同版本的 WorkBuddy 可能有差异,请根据实际情况调整。