C 盘红了。
你终于决定清理 C 盘。你打开系统设置(Win + I → 系统 → 存储),点进”其他”(或”显示更多类别”),想看看到底是谁在占用空间。结果映入眼帘的,是一长串程序数据文件:C:\Users\John\.workbuddy、C:\Users\John\.trae-cn、C:\Users\John\.nuget…… 一堆以 . 开头的目录,动辄几个 G 甚至几十个 G,全挤在 C 盘上。
这些都是各类开发工具、AI 助手的”家”——工作区缓存、模型文件、插件、索引,全都默认落在用户目录下。它们有一个共同点:不太好搬。
- 设置里往往根本没有”更改保存路径”的选项,或者藏得极深;
- 就算找到了选项,下次软件更新后可能又被悄悄改回默认,C 盘再次变红;
- 有的工具干脆把绝对路径写进了配置甚至数据库里,你手动把文件剪切过去,它反而”找不到家”直接报错。
微信和 QQ 好歹在设置里有个”更改保存路径”,可对这些工具,你连个入口都找不到。
有没有一种办法,让软件永远认为数据还在 C 盘原来的位置,而实际文件全部躺在 D 盘?
有。Windows 自带这个功能,名字叫 Junction(目录联接)。而且它不挑软件——微信、QQ、Trae、各种 . 开头的工具目录,通吃。
Junction 是什么?
一句话:Junction 是 NTFS 文件系统层面的一个”传送门”。它在 C 盘原地放一个假的目录入口,任何程序访问这个入口时,文件系统会自动把读写转发到 D 盘的真实目录。
它和你熟悉的”快捷方式”完全不是一回事:
| 快捷方式(.lnk) | Junction(目录联接) | |
|---|---|---|
| 存在层面 | 桌面上的一个普通文件 | NTFS 文件系统的底层机制 |
| 谁能感知 | 只有双击它的人 | 所有程序、所有系统调用 |
| 对软件透明 | 否 | 完全透明 |
关键就在”透明”两个字:微信去读 C:\...\WeChat Files 时,它根本不知道脚下有一扇传送门——因为对它来说,这不是”跳转”,而是路径本来就在那里。所以软件更新、重装、注册表校验,统统不会破坏这个方案。
顺带一提,Junction 还有个好处:创建它不需要管理员权限(普通目录符号链接 mklink /D 需要管理员,Junction 不需要)。
动手:三步搬家
思路很简单:复制 → 原地让位 → 架传送门。
下面以”微信聊天记录”为例,假设我们要把它从
C:\Users\John\Documents\WeChat Files
搬到 D:\AppData\WeChat Files。
换成
C:\Users\John\.trae-cn→D:\AppData\trae-cn这样的”点目录”,步骤一字不差。
第 0 步:先退出微信(以及所有可能占用这个目录的程序)。
第 1 步:把数据完整复制到 D 盘
打开命令提示符(不需要管理员权限):
robocopy "C:\Users\John\Documents\WeChat Files" "D:\AppData\WeChat Files" /E /COPY:DAT /XJ /R:1 /W:1
/E:复制所有子目录,包括空目录/XJ:跳过 Junction/符号链接,防止复制时陷入死循环(重要!)/R:1 /W:1:遇到被占用文件只重试 1 次、等 1 秒,避免卡死
robocopy 是 Windows 自带的,比资源管理器复制靠谱得多——它会显示进度、校验结果,中断了还能续传。
第 2 步:确认无误后,把原目录”让位”
先别急着删。稳妥起见,改名备份:
ren "C:\Users\John\Documents\WeChat Files" "WeChat Files.bak"
然后建一个空目录并挂上传送门:
mklink /J "C:\Users\John\Documents\WeChat Files" "D:\AppData\WeChat Files"
成功的话你会看到一行:
为 C:\Users\John\Documents\WeChat Files <<===>>> D:\AppData\WeChat Files 创建的联接
第 3 步:验证
- 用
dir C:\Users\John\Documents /a查看,会看到<JUNCTION>标记 - 启动微信,正常收发消息、翻历史记录
- 去
D:\AppData\WeChat Files看一眼,新的聊天图片正在往这里落
一切正常后,观察几天,再把 WeChat Files.bak 删掉,C 盘空间就真正解放了。
小白三连问:怎么看、怎么查、能不能改
搬完家,新的疑问往往紧跟着来。这三个问题几乎人人都会遇到。
问题一:怎么知道一个目录是普通文件夹,还是 Junction?
有三种办法,从”肉眼”到”精确”:
① 看图标。Junction 目录在资源管理器里长得和普通文件夹几乎一样,但图标左下角带一个快捷方式的小箭头。看到”文件夹 + 小箭头”,八成就是个联接。
② 用 cmd 的 dir 命令(推荐,信息最全):
dir C:\Users\John /a
输出里普通文件夹显示为 <DIR>,而联接会明确标出类型和指向:
2026/10/24 15:00 <JUNCTION> .trae-cn [D:\AppData\trae-cn]
2026/10/24 15:00 <SYMLINKD> some-link [D:\elsewhere]
2026/10/24 15:00 <DIR> Documents
<JUNCTION> 是目录联接,<SYMLINKD> 是目录符号链接,方括号里就是它指向的真实位置。普通文件夹没有方括号。
③ 用 PowerShell 一行查询(想知道单个目录的信息时最方便):
Get-Item "C:\Users\John\.trae-cn" | Select-Object LinkType, Target
输出类似:
LinkType Target
-------- ------
Junction D:\AppData\trae-cn
LinkType 为空就是普通文件夹;Junction 是目录联接;SymbolicLink 是符号链接。
问题二:怎么知道一个 Junction 指向了哪里?
其实上面三种方法全都顺带回答了这个问题:
- 资源管理器里把鼠标悬停在 Junction 图标上,气泡提示会显示目标路径;
dir /a看方括号[...]里的内容;- PowerShell 的
Target字段。
进阶一点还可以用系统自带的:
fsutil reparsepoint query "C:\Users\John\.trae-cn"
它会显示底层的重解析点数据(里面能看到目标路径),排查疑难问题时有用。
问题三:Junction 创建之后,还能改指向吗?
不能直接改,但可以删了重建——而且这个过程完全无损:
Junction 的指向信息写在文件系统的重解析数据里,Windows 没提供”编辑指向”的命令。想换个目标(比如从 D:\AppData 挪到 E:\AppData),标准做法是:
rmdir "C:\Users\John\.trae-cn"
mklink /J "C:\Users\John\.trae-cn" "E:\AppData\trae-cn"
划重点:rmdir 删掉的只是”传送门”本身,D 盘(或 E 盘)里的真实文件一个都不会少。删完立刻重建,中间不过一两秒,软件甚至不会有感觉。
另外两个相关的小知识:
- 重命名、移动 Junction 本身是允许的(在同一分区内)。比如把
WeChat Files联接改名,不影响它指向哪里——变的只是”门牌号”。 - 但反向操作要警惕:通过 Junction 往里面删除或修改文件,删改的是 D 盘的真实文件。传送门是双向透明的——这既是它好用的原因,也是新手最容易踩的地方:你以为在删 C 盘的”副本”,其实删的是唯一的正本。
实战清单:哪些目录值得搬
同样的三板斧,适用于一切”没有更改路径选项”的软件。开头提到的那些”点目录”就是重灾区:
- AI 工具与编辑器:
C:\Users\你\.trae-cn(Trae 的扩展、缓存)、.vscode、.codeium…… AI 编辑器越用越大,模型和扩展缓存悄悄吃掉几十个 G 是常事 - 开发工具链:
.nuget(.NET 包缓存)、.gradle、.m2(Maven)、.ollama(本地大模型,动辄 4~40 G 一个)——这些目录在软件里根本没有改路径的入口 - QQ:
C:\Users\你\Documents\Tencent Files - 微信:
Documents\WeChat Files(虽然新版有改路径选项,但用 Junction 一劳永逸,不怕更新重置) - 各类软件的缓存目录:
%LOCALAPPDATA%下那些动辄几个 G 的文件夹(比如Google\Chrome、各种游戏的 shader 缓存) - 游戏存档:很多老游戏把存档硬编码在”我的文档”下
一个小技巧:拿不准该搬哪个,就回到 设置 → 系统 → 存储 → “其他”,按大小排序,从最大的开始挑。
桌面、文档这类特殊文件夹优先用系统自带的”位置”选项卡(右键属性 → 位置)来迁移,那是官方做法;Junction 留给官方不管的地方。
几个必须知道的坑
- Junction 只能在本地 NTFS 盘之间使用。目标不能是 U 盘(exFAT)、网络路径,跨盘到 NTFS 的 D 盘没问题。
- 删除时小心:用
rmdir删除 Junction 本身,不会删除 D 盘的真实文件;但如果你在资源管理器里把 C 盘那个 Junction 目录”递归删除”,部分工具会穿透联接把 D 盘源文件一起删掉。建议一律用rmdir "路径"。 - 杀毒软件 / 备份软件可能误判:个别增量备份工具会穿透 Junction 造成重复备份,记得加排除规则(robocopy 的
/XJ就是这个用途)。 - OneDrive 用户注意:如果”文档”、”桌面”被 OneDrive 接管了,先理清 OneDrive 的关系再操作,别把同步目录架进传送门里。
- 改路径设置 vs Junction,选一个:如果你已经用微信自带的”更改保存路径”改过了,目录位置就变了,先按实际路径操作,别对着记忆里的老路径打。
原理小结
Junction(目录联接)是 NTFS 从 Windows 2000 时代就支持的机制,本质是一个只指向本机目录的重解析点(Reparse Point)。Windows 在路径解析阶段就把请求转发到了目标位置,所以对应用层完全不可见。
这也是它比”改软件设置”更可靠的原因:改设置是在和每个软件的开发者博弈,而 Junction 是直接改写”现实”本身——路径没变,变的是路径背后的物理位置。
一句话总结:数据搬家,门牌号不动。 下次 C 盘再红,别再和软件设置斗智斗勇了。
# 完整流程速查(以任意目录为例)
robocopy "C:\源目录" "D:\目标目录" /E /COPY:DAT /XJ /R:1 /W:1
ren "C:\源目录" "源目录.bak"
mklink /J "C:\源目录" "D:\目标目录"
# 验证正常后:rmdir 不删源;确认稳定后删除 .bak
# 查看 / 验证
dir "C:\Users\John" /a # <JUNCTION> 标记 + [指向位置]
Get-Item "C:\某目录" | Select-Object LinkType, Target # PowerShell 查单个目录
fsutil reparsepoint query "C:\某目录" # 底层重解析点数据
# 修改指向(删除门不删数据,然后重建)
rmdir "C:\某目录"
mklink /J "C:\某目录" "D:\新目标目录"