基本介绍

mklink 是 Windows 中用于创建符号链接(symlink)、硬链接(hard link)和目录联接(directory junction)的命令。以下是一些常用的 mklink 命令以及如何使用它们创建文件夹链接的介绍。

基本语法

1
mklink [options] <Link> <Target>
  • <Link> 是要创建的链接的名称。
  • <Target> 是链接所指向的目标文件或文件夹。

常用选项

  • /D - 创建一个目录符号链接。默认情况下,mklink 创建的是文件符号链接,所以如果要创建一个指向目录的符号链接,需要使用这个选项。
  • /H - 创建一个硬链接,而不是符号链接。硬链接只能指向同一分区上的文件。
  • /J - 创建一个目录联接。这是一个特殊类型的符号链接,专门用于目录。

创建文件夹符号链接

假设有一个目标文件夹 C:\OriginalFolder,如果想在 C:\NewFolderLink 位置创建一个指向它的符号链接,使用以下命令:

1
mklink /D C:\NewFolderLink C:\OriginalFolder

创建文件夹硬链接

硬链接不能用于目录,只能用于文件。所以如果需要创建目录的链接,建议使用符号链接或目录联接。

创建目录联接

如果希望创建一个目录联接,使用以下命令:

1
mklink /J C:\NewFolderLink C:\OriginalFolder

示例

  1. 创建指向目录 C:\Users\YourName\Documents\MyFolder 的符号链接:

    1
    mklink /D C:\LinkToMyFolder C:\Users\YourName\Documents\MyFolder
  2. 创建指向目录 D:\Data\Projects 的目录联接:

    1
    mklink /J C:\ProjectsLink D:\Data\Projects

注意事项

  • 确保在命令提示符(cmd)中以管理员身份运行 mklink 命令,因为创建符号链接需要管理员权限。
  • 使用符号链接和目录联接时,请注意目标路径的有效性。如果目标路径不存在或不可访问,链接将无法正常工作。

通过 mklink 命令,可以方便地在不同目录之间创建快捷方式,简化文件和目录的管理。

\D\J的区别

/D/Jmklink 命令中用于创建不同类型目录链接的选项,它们的主要区别如下:

/D - 创建目录符号链接 (Symbolic Link)

  • 符号链接(symlink)是一个引用指向另一个文件或目录的路径。
  • 符号链接可以跨不同的文件系统分区使用,也可以指向网络路径。
  • 符号链接可以指向不存在的目标(当目标路径存在时链接才会有效)。
  • 删除符号链接不会影响目标文件或目录。

示例:

1
mklink /D C:\LinkToFolder C:\OriginalFolder

这个命令创建一个符号链接 C:\LinkToFolder,它指向 C:\OriginalFolder

/J - 创建目录联接 (Directory Junction)

  • 目录联接(junction)是 Windows 的 NTFS 文件系统中的一种特殊类型的符号链接。
  • 目录联接只能用于本地目录,不能用于网络路径。
  • 目录联接仅适用于目录,不适用于单个文件。
  • 目录联接通常比符号链接更兼容一些旧的 Windows 应用程序。
  • 删除目录联接不会影响目标目录中的文件。

示例:

1
mklink /J C:\JunctionToFolder C:\OriginalFolder

这个命令创建一个目录联接 C:\JunctionToFolder,它指向 C:\OriginalFolder

总结

  • 符号链接(使用 /D)更灵活,可以指向任意文件或目录,并且可以跨分区和网络使用。
  • 目录联接(使用 /J)更局限,只能用于本地目录,但可能在一些场景下有更好的兼容性。

选择使用 /D 还是 /J 取决于具体需求。如果需要更高的灵活性和跨分区支持,选择 /D;如果主要在本地文件系统中操作目录并且需要兼容一些旧应用程序,选择 /J

查看文件/文件夹链接类型

要查看一个链接的类型是 /D(符号链接)还是 /J(目录联接),可以通过以下几种方法来进行检查:

使用 dir 命令

  1. 打开命令提示符(cmd)。
  2. 导航到包含链接的目录。
  3. 输入 dir 命令。

dir 命令的输出中:

  • 符号链接会显示为 <SYMLINKD>
  • 目录联接会显示为 <JUNCTION>

示例:

1
C:\> dir

输出可能类似于:

1
2
3
4
2024-05-30  10:30 AM    <DIR>          .
2024-05-30 10:30 AM <DIR> ..
2024-05-30 10:31 AM <SYMLINKD> LinkToFolder [C:\OriginalFolder]
2024-05-30 10:32 AM <JUNCTION> JunctionToFolder [C:\OriginalFolder]

在这里,LinkToFolder 是符号链接,JunctionToFolder 是目录联接。

使用 fsutil 命令

  1. 打开命令提示符(cmd)以管理员身份运行。
  2. 使用 fsutil reparsepoint query 命令。

示例:

1
fsutil reparsepoint query C:\LinkToFolder

如果这是一个符号链接,输出会包含类似 Reparse Tag Value: 0xA000000C 的信息。
如果这是一个目录联接,输出会包含类似 Reparse Tag Value: 0xA0000003 的信息。

使用 PowerShell

  1. 打开 PowerShell。
  2. 导航到包含链接的目录。
  3. 使用 Get-Item cmdlet。

示例:

1
2
(Get-Item C:\LinkToFolder).LinkType
(Get-Item C:\JunctionToFolder).LinkType

输出会显示 SymbolicLinkJunction,分别表示符号链接和目录联接。

示例综合

假设有两个链接:C:\LinkToFolderC:\JunctionToFolder。使用上述方法,可以轻松地确定它们的类型。

  • 在命令提示符中运行 dir 命令,可以看到 LinkToFolder 是符号链接 (<SYMLINKD>),而 JunctionToFolder 是目录联接 (<JUNCTION>)。
  • 使用 fsutil reparsepoint query 命令可以进一步确认它们的类型。
  • 在 PowerShell 中使用 Get-Item cmdlet 也可以查看链接的类型。

通过这些方法,可以准确地确定一个链接是符号链接还是目录联接。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。