Windows 创建符号链接的命令 mklink

在 Linux 中,命令 ln 可以方便地创建符号链接,而符号链接在系统运行过程中也起到了很重要的作用。 符号链接,可以理解为也是一种文件或目录,有自己的名称,只不过访问这个文件或目录,等同于访问其目标。 在 Windows 中,可以采用 mklink 命令创建符号链接,也能实现和在 Linux 中类似的效果。

命令语法

根据官方文档, 该命令的语法如下(注意这是一个 Windows Command Prompt 命令,不能在 Powershell 中使用):

1
mklink [[/d] | [/h] | [/j]] <link> <target>

该命令中的两个参数 <link><target><link> 是符号链接的名称,而 <target> 是链接目标的路径。 根据选项 [/d] [/h] [/j] 的不同该命令一共能创建四种符号链接:文件软链接、文件硬链接、目录软链接、目录联接。 参考始终的博客可知:

文件符号链接文件硬链接目录符号链接目录联接
选项/h/d/j
参数文件文件目录目录
修改同步
删除同步
资源管理器类型.symlink无特殊显示文件夹文件夹
资源管理器图标快捷方式无特殊显示文件夹快捷方式文件夹快捷方式
彻底删除源删除源路径删除所有硬链接删除源路径删除源路径

注意该命令运行需要管理员权限。

目录符号连接和目录联接

对于文件,符号连接和硬链接的区别比较明显,而且和 Linux 中的差不多。但是对于目录,有符号链接和联接两种模式,这两种模式看起来是一样的,有什么区别?

根据 Understanding NTFS Hard Links, Junctions and Symbolic Links](https://www.2brightsparks.com/resources/articles/NTFS-Hard-Links-Junctions-and-Symbolic-Links.pdf)) 中的介绍,这两种模式最大的区别在于使用的技术不同:

  • 目录联接在 Windows 2000 中被引入,主要基于 NTFS 文件系统的 reparse points 特性实现。重定向的目标必须通过绝对路径定义,所有用于确定目标的信息都在这个路径里。而由于是基于 NTFS 文件系统实现的,所以目录联接只能用于本地路径。
  • 目录符号链接在 Windows Vista 中被引入,是一种更高级的快捷方式。重定向的目标可以是本地路径,也可以是通过 SMB 协议挂在的网络路径。

因此,当需要挂在网络路径时,就需要使用 /d 参数创建目录符号链接。如果只是本地路径,那么使用 /j 或者 /d 都可以。

但是,当链接到 OneDrive 中的文件夹时,如果使用符号链接,会造成一些问题。如果文件没有被下载到本地,那么在双击运行时,资源管理器在下载文件后会产生文件冲突的错误。此时就只能使用 /j 选项,创建目录联接,才可以正常使用。

感谢您的阅读,本文由 HPDell 的个人博客 版权所有。如若转载,请注明出处:HPDell 的个人博客(http://hpdell.github.io/编程/windows-cmd-mklink/
《风起洛阳》观后感
自己动手写动态博客(二)