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 复制工作空间
cmd
robocopy "C:\Users\用户名\WorkBuddy\Claw" "D:\WorkBuddy\Claw" /E /COPYALL
2.2 复制全局配置
cmd
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
cmd
mklink /J "C:\Users\用户名\WorkBuddy\Claw" "D:\WorkBuddy\Claw"
这一步比较顺利,直接创建成功。
后续优化:改为创建父级 Junction
C:\Users\用户名\WorkBuddy→D:\WorkBuddy,这样Claw子目录自动解析,不需要单独的子 Junction。但这一步需要先删除子 Junction,详见后面的踩坑。
第 2 步:创建全局配置 Junction
cmd
mklink /J "C:\Users\用户名\.workbuddy" "D:\.workbuddy"
🕳️ 坑 1:WorkBuddy 运行时不断重建 .workbuddy 目录
现象 :删除 C:\Users\用户名\.workbuddy 后,WorkBuddy 进程立即重建该目录,删除跟不上重建速度,无法创建 Junction。
原因 :WorkBuddy 运行时会持续向 .workbuddy 写入文件(插件下载、缓存等)。
解决方案:先重命名旧目录,再创建 Junction,最后删除旧目录:
cmd
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 后以管理员身份运行:
cmd
@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 的包都没了。
解决方案:
cmd
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 的情况下以管理员身份运行:
cmd
@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 可能有差异,请根据实际情况调整。