创建符号链接、硬链接或目录联接,把路径指向别处。
mklink 在 NTFS/ReFS 卷上创建链接:默认创建文件符号链接,/d 创建目录符号链接,/h 创建硬链接,/j 创建目录 junction(联接)。符号链接可以跨卷、可以指向 UNC 路径;硬链接只能指向同一卷上的文件,多个链接共享同一份数据;junction 只能指向本机本地卷上的目录,不能指向映射的网络驱动器(官方说明)。它常用于把大目录搬到另一块盘后在原位置留一个入口,或让多个项目共享同一份配置。
边界:链接不是复制,目标删了链接就悬空;通过链接写入会直接改到目标。硬链接没有“原文件”和“副本”之分,删掉任意一个链接,数据仍在其它链接下,直到最后一个链接被删。符号链接的相对目标按链接所在目录解析,不是按当前目录;相对符号链接还限制在单卷内。创建符号链接默认需要管理员权限或 SeCreateSymbolicLinkPrivilege,Windows 10/11 开启开发者模式后部分非管理员场景可以创建;硬链接和 junction 通常不需要提权,但仍受父目录和目标 ACL 限制。
Windows Vista/Server 2008 起内置 mklink,Windows 10/11 与 Server 2016+ 参数一致。PowerShell 中没有 mklink 别名,要用 New-Item -ItemType SymbolicLink/Junction/HardLink;mklink 是 CMD 外部程序,在 PowerShell 中可直接调用。FAT/exFAT 不支持这些链接。
影响范围 / 先备份 / 如何回滚:链接会改变后续读写实际落到的位置,放在系统目录或服务配置路径上可能让程序写到错误目标;递归工具若跟随链接,可能重复复制甚至误删目标内容。创建前确认链接名不存在、记录目标绝对路径并备份目标数据;回滚时只删除链接本身:文件链接用 del,目录链接或 junction 用 rd,不要用 del 删目录链接,也不要把链接交给会跟随链接递归删除的第三方工具。
# 1. 给共享配置文件建文件符号链接
C:\> mklink C:\dev\app-config.ini D:\shared\config.ini
# 2. 把大资源目录留在 D 盘,项目里用目录符号链接访问
C:\> mklink /D C:\dev\assets D:\shared\assets
# 3. 用 junction 把构建缓存指向本地另一块盘
C:\> mklink /J C:\build\cache D:\cache\build
# 4. 为同一卷上的文件建硬链接,节省空间且共享修改
C:\> mklink /H C:\data\report.docx C:\backup\report.docx
# 5. 目录符号链接可以指向 UNC 共享
C:\> mklink /D C:\logs \\fileserver\share\logs
# 6. 列出目录中的链接及其类型
C:\> dir /AL C:\dev
# 7. 删除目录链接本身,目标不受影响
C:\> rd C:\dev\assets
mklink 不会覆盖,报“Cannot create a file when that file already exists”;先 dir 确认,必要时给链接换个名字。/d。del,目录链接或 junction 用 rd;del <目录链接> 会把它当目录并删除目标里的文件。robocopy 默认会处理 junction,/xj 排除 junction,/sl 复制符号链接本身,/sj 复制 junction 本身;备份前先确认要链接还是目标内容。合上页面,先回答,再展开对照。
/h、/j、/d 三种链接分别有什么限制?del?/h 只能链接同卷文件,/j 只能链接本地卷目录,/d 可跨卷并可指向 UNC。rd 删链接本身;del 会把目录链接当目录,删除目标里的文件。
小程序版
微信扫码,随时查命令