普通 Windows 文件夹可以先复制到另一块本地硬盘,再在原位置建立 junction,让程序继续使用原来的路径。关键是先核对副本,切换后先测试程序,最后才考虑删除旧文件夹。这种方法适合你明确知道用途的普通文件夹,不适合拿来搬动 Windows 系统目录。
先判断这个文件夹是否适合搬
下文用自建的 C:\Work\SampleData 作示例,目标是 D:\Moved\SampleData。执行命令时,两处路径都要换成你的真实路径。先在文件资源管理器的“此电脑”中右键目标盘,打开“属性”,确认它是本地 NTFS 磁盘,并且有足够空间容纳整个文件夹和以后新增的文件。
复制前,退出正在读写该文件夹的程序,也暂停可能修改它的后台同步或构建任务。如果你不清楚 C:\Windows、C:\Program Files 或 C:\Users\YourName\AppData 里的某个目录属于谁,先查清用途。正在使用的程序目录即使能建立 junction,也可能因复制不完整或更新程序的行为而出错。
“文档”“下载”“图片”等带有“位置”选项卡的用户文件夹,应优先在文件夹“属性”里用“位置”中的“移动”按钮。Steam 游戏库应优先用 Steam 自带的存储迁移功能。OneDrive 要用它自己的位置变更流程,别用 junction。目标盘也必须保持连接,盘符不能随意变化;若 D: 消失或变成别的盘符,原路径就无法再找到文件。
保留原文件夹,先复制数据
打开“命令提示符”。下面是 cmd.exe 命令,不是 PowerShell 命令。确认 C:\Work\SampleData 确实存在,而且 D:\Moved\SampleData 没有无关数据。若 D:\Moved 尚不存在,先在文件资源管理器中建立,然后执行:
robocopy "C:\Work\SampleData" "D:\Moved\SampleData" /E /COPY:DAT /DCOPY:DAT /R:2 /W:2 /XJ
echo %ERRORLEVEL%
/E 会包含空子文件夹;/COPY:DAT 复制文件数据、属性和时间戳,/DCOPY:DAT 对目录做相应处理。/R:2 /W:2 限制失败文件的重试次数和等待时间;/XJ 避免沿着源目录里已有的 junction 继续复制。这里不要用 /MOVE 或 /MIR:在确认新位置可用之前,原文件夹就是你的恢复副本。
Robocopy 的返回码与很多命令不同:小于 8 通常表示复制流程完成,8 或更大表示出现失败。仍要阅读末尾的汇总;如果有重要文件复制失败或被跳过,就先处理原因。若复制期间源文件发生变化,关闭写入它的程序后再复制一次,不要在文件还会变化时切换路径。
在文件资源管理器中打开源和目标目录,查看大文件及多层子目录是否齐全。程序都关闭后,还可以做一次只列出差异、不实际复制的检查:
robocopy "C:\Work\SampleData" "D:\Moved\SampleData" /E /L /COPY:DAT /DCOPY:DAT /R:0 /W:0 /XJ
/L 只列出原本需要执行的操作。如果它仍列出应复制的文件,要先查明是源文件又变了,还是目标漏了文件。这个检查不是逐字节校验;重要数据还应按平时的方式备份,并使用相关程序自己的验证方法。到这一步为止,C: 上没有删除任何东西,可以直接停下。
核对副本后才替换原路径
保持相关程序关闭。先把原文件夹改名,让原路径空出来,再建立 junction:
ren "C:\Work\SampleData" "SampleData.original"
mklink /J "C:\Work\SampleData" "D:\Moved\SampleData"
dir /AL "C:\Work"
ren 不会删除原件。mklink /J 的第一个路径是 junction 所在的位置,第二个路径是它指向的目标。dir /AL 的结果应表明 SampleData 是指向 D:\Moved\SampleData 的 junction。再用文件资源管理器打开 C:\Work\SampleData,确认文件可见,然后运行原来的程序测试。
如果 mklink 失败,不要删除任何一份数据。先检查旧路径是否真的空出来、目标目录是否存在,以及命令提示符是否有权限写入 C:\Work。若决定不继续,把 SampleData.original 改回 SampleData 即可。若建立 junction 后程序不能正常工作,先按下文恢复,再继续修改相关文件。
程序正常、并且另有独立备份后,才通过文件资源管理器删除 C:\Work\SampleData.original,腾出 C: 空间。一定要看清名字:带 .original 的是旧实体目录,C:\Work\SampleData 是 junction。若通过 junction 删错内容,可能删掉 D: 上的文件。暂时保留原件是为了回退方便,此时 C: 也还没有完全腾出空间。
不删除目标数据,撤销 junction
再次退出相关程序。先用 dir /AL "C:\Work" 确认 C:\Work\SampleData 仍是 junction。如果 SampleData.original 还在,只删除 junction,再恢复旧文件夹的名称:
rmdir "C:\Work\SampleData"
ren "C:\Work\SampleData.original" "SampleData"
这里的 rmdir 不要加 /S。只删除目录 junction 不会删除它指向的目标目录。启动程序之前,先确认 C:\Work\SampleData 能正常打开。D:\Moved\SampleData 的副本依然存在;但切换后新增的工作可能只在 D:,恢复的旧目录未必包含这些变更。
如果已经删了 SampleData.original,先确认 C: 空间够用,将 D:\Moved\SampleData 复制到 C: 上另一个临时目录并核对。随后确认旧路径确为 junction,用 rmdir 仅移除它,将恢复好的目录改名为 SampleData,再测试程序。未分清真实目录和 junction 前,不要对该路径执行递归删除。
使用 AiCleanDisk Pro 搬移
AiCleanDisk Pro 可以把符合条件的文件夹搬到另一块 NTFS 磁盘,并在原位置留下 junction。它会检查目标盘剩余空间、列出占用文件夹的程序、核对复制结果,并记录迁移历史,方便以后搬回或重建缺失的 junction。它还会提醒你不要搬动 OneDrive 等不适合的目录。扫描与清理系统盘免费;搬移文件夹需要许可证。如果你还没找出占空间的目录,可以先看 C 盘清理后又变满的排查指南。
如果你清楚目录用途,也能逐步核对,上面的手动方法就能完成搬移。无论选哪种方式,都应保留独立备份,并确保目标盘盘符稳定。
微软提供了 Robocopy 参数说明 和 mklink /J 命令说明。