mklink 是什么
mklink 是 CMD 的内置命令(不是独立可执行文件),用于创建符号链接、硬链接和目录联接。它解决的核心问题是「数据搬走了,但路径必须还在」:把大目录放到另一个盘,再用链接占住原来的位置,程序与脚本完全无感。三类链接语义差别很大,混用会带来删除、备份与权限上的意外,动手前先确认要的是哪一种。因为它是 CMD 内置命令,PowerShell 里要写成 cmd /c mklink ... 才能调用。
基本信息
| 适用平台 | Windows Vista 及以后(含 10/11、Server 2008 以后) |
|---|---|
| 语法 | mklink [/d] [/h] [/j] 链接名 目标 |
| 参数 | /d 目录符号链接、/h 文件硬链接、/j 目录联接;不加参数则建文件符号链接 |
| 权限要求 | 符号链接需管理员或开启开发者模式;目录联接普通用户可建 |
| 指向范围 | 符号链接可指向网络路径,硬链接与目录联接仅限本地卷 |
| 限制 | NTFS 卷;不支持跨卷硬链接与指向文件的联接 |
典型使用场景
- 磁盘迁移:C 盘紧张,把日志、镜像目录搬到数据盘后原路径继续可用
- 兼容老程序:软件写死了绝对路径,用链接把新位置挂回老路径
- 共享依赖:多个工程引用同一份缓存目录,避免反复复制占空间
- 硬链接省空间:同一份大文件在多个目录出现,只占一份数据块
- 测试环境搭建:把生产目录联接到测试盘,快速验证脚本改动
常用示例
常用示例
REM 管理员或开发者模式下运行 CMD
mklink D:\link.txt D:\target\file.txt # 文件符号链接(默认)
mklink /d C:\Logs D:\BigDisk\Logs # 目录符号链接,可指向网络路径
mklink /j D:\GameLib E:\GameLib # 目录联接,仅本地卷、普通用户可建
mklink /h C:\a\data.bin D:\b\data.bin # 硬链接:同一数据块的第二个名字
cmd /c mklink /d C:\Logs D:\BigDisk\Logs # PowerShell 里必须经 cmd /c 调用
REM 查看与清理
dir /AL C:\ # 列出含重解析点的条目
del D:\link.txt # 删文件链接不删目标数据
rmdir C:\Logs # 删目录链接用 rmdir,删不动说明是联接以外的类型三类链接怎么选
| 类型 | 适用对象 | 特点与注意 |
|---|---|---|
| 符号链接(默认) | 文件或目录(/d) | 指向路径本身,可跨盘与指向网络位置,需管理员或开发者模式 |
| 硬链接(/h) | 仅文件、仅本地卷 | 与目标共享数据块,删任一名不影响数据,不占额外空间 |
| 目录联接(/j) | 仅本地卷目录 | 由 mklink /j 创建,普通用户即可,老程序兼容性最好 |
删除链接本身不会删除目标数据,但删掉目标会让链接变成死链(访问报「找不到路径」)。硬链接相反:只要还有一个名字存在,数据就不会丢。
备份与同步工具对链接的处理不一致:robocopy 默认会跟随符号链接进入目标目录,复制内容而非链接,加 /XJ(排除联接)或 /SL(复制链接本身)才能符合预期。
PowerShell 侧等价做法
PowerShell 侧等价做法
New-Item -ItemType SymbolicLink -Path C:\Logs -Target D:\BigDisk\Logs # 符号链接
New-Item -ItemType Junction -Path D:\GameLib -Target E:\GameLib # 目录联接
Get-Item C:\Logs | Select-Object LinkType, Target # 查看链接类型与目标在链接目录上执行递归删除(rmdir /s、rd /s /q)时,不同 Windows 版本行为不同,历史上出现过误删目标目录内数据的案例:删除前用 dir /AL 确认哪些条目是链接,并先备份。