mklink ,这是一个内置的命令行工具,用于创建符号链接(symbolic link)、硬链接(hard link)或目录联接(junction)。
使用前提
- 需要以 管理员身份 运行命令提示符(CMD):右键“命令提示符” > “以管理员身份运行”。
- 从 Windows Vista 开始支持(包括 Windows 10/11)。
- 输入 mklink /? 可以查看帮助。
基本语法
MKLINK [[/D] | [/H] | [/J]] 链接名 目标路径
- 链接名 :你要创建的链接路径(新名称,不能已存在)。
- 目标路径 :现有的文件或文件夹路径(可以是绝对路径或相对路径,建议用双引号包裹含空格的路径)。
参数说明和常见用法
- 文件符号链接(Symbolic Link,默认)
-
不加任何参数,或隐式用于文件。
-
示例:为文件创建符号链接(类似快捷方式,但更底层,程序透明)。
mklink 链接文件.txt C:\路径\目标文件.txt或带双引号:
mklink "C:\MyLink.txt" "D:\Original.txt"
-
- 目录符号链接(/D)
-
用于文件夹,类似软链接,支持跨盘符、网络路径。
-
示例:
mklink /D "C:\MyFolderLink" "D:\OriginalFolder"
-
- 硬链接(/H)
-
只用于 文件 (不能用于文件夹),必须在同一分区,不占用额外空间,删除一个另一个仍存在。
-
示例:
mklink /H "C:\HardLink.txt" "C:\Original.txt"
-
- 目录联接(/J,也称 Junction)
-
用于文件夹,只能本地绝对路径,不能跨网络,但常用于迁移大文件夹(如解放 C 盘空间)。
-
示例:
mklink /J "C:\OldFolder" "D:\NewLocationFolder"常见场景:先把文件夹剪切到 D 盘,再用此命令在原位置创建联接,程序不会察觉变化。
-
注意事项
- 创建符号链接(无参数或 /D)通常需要管理员权限。
- 删除链接:
- 文件链接:用 del 链接名 (只删链接,不删目标)。
- 目录链接:用 rmdir 链接名 (只删链接,不删目标)。
- 千万别用 del 删除目录链接里的内容 ,会删目标文件!
- 查看链接类型:在资源管理器中,符号链接有小箭头图标;用 dir 命令会显示
或 。 - 与快捷方式区别:mklink 创建的链接更底层,许多程序(如游戏、软件安装路径)能直接识别,而.lnk 快捷方式有时不行。
示例:解放 C 盘空间(常见需求)
假设要把 C:\Program Files\BigApp 移到 D 盘:
-
关闭相关程序。
-
剪切 BigApp 文件夹到 D:\BigApp 。
-
以管理员运行 CMD:
mklink /J "C:\Program Files\BigApp" "D:\BigApp"
程序仍能正常运行,像没动过一样。
mklink /J "C:\Program Files\BigApp" "D:\BigApp" 此例中,在C:\Program Files\BigApp写入新文件,它保存在哪里?
在你给的例子中:
mklink /J "C:\Program Files\BigApp" "D:\BigApp"
- C:\Program Files\BigApp 是 junction (目录联接),它只是一个“重定向点”,本身不存储任何实际数据。
- D:\BigApp 是真正的目标文件夹,存放所有实际文件。
如果你通过 C:\Program Files\BigApp 这个路径写入新文件(比如程序安装、保存数据、创建子文件夹等):
- 新文件会 实际保存在 D:\BigApp 中(包括所有子文件夹)。
- 从资源管理器或任何程序看来,仿佛文件写在了 C 盘,但实际上全部在 D 盘占用空间。
为什么这样?
Junction(/J)是 NTFS 文件系统的重解析点(reparse point),它会透明地将所有读写操作重定向到目标路径。程序和系统完全察觉不到这个“欺骗”,所以:
- 读取旧文件:从 D:\BigApp 读取。
- 写入新文件:写入到 D:\BigApp。
- 删除文件:删除 D:\BigApp 中的文件(小心!通过 junction 删除会真正删掉目标文件)。
这正是用来“解放 C 盘空间”的核心机制:把大文件夹移到 D 盘后,用 junction 在原位置“伪装”回去,程序仍按老路径运行,新产生的数据也自动去 D 盘。
验证方法
- 创建一个新文件: 在 C:\Program Files\BigApp 下新建一个 test.txt。
- 检查位置: 打开 D:\BigApp,你会看到 test.txt 出现在那里,而 C 盘的 junction 本身几乎不占空间。
如果目标 D:\BigApp 不存在或不可访问,写入会失败(报错如“无法访问”)。
Comments