Win10 中的文件链接

来源:互联网 发布:it狂人类似 编辑:程序博客网 时间:2024/05/20 06:31

在 linux 系统里,通常可以用 ln 指令创建文件链接。而在windows中,其实也是有类似的指令,可以实现文件链接。
说明一下,我自己的电脑操作系统是win10,虽然理论上mklink能够在win7上使用,但是以下结论并没有在win7上面实践。

命令行指令为 New-Item,别名 ni, 具体可以查看 Microsoft Doc - New-Item 。

我自己实测的时候,发现这里面还是有一些坑,下面简单描述。

快捷方式 or 软链接 or 硬链接

我不懂太多术语,只是描述一下我在实测中感受到的他们的区别。

首先是扩展名:
“快捷方式” 拥有统一的扩展名 .lnk ,其对应的文件类型为 “快捷方式”,就我个人感觉,这玩意应该是windows特有的吧。
“软链接” 我认为没有自己的扩展名,我这么说,是感觉这东西还是源于 “*nix”系统,这些系统并不总是依靠文件扩展名来区分文件类型,没有扩展名的文件同样可以标记为 “Executable”,同样的功能在windows里实现会很蹩脚或无法实现。在我实测中,有时软链接的映像文件带了扩展名,反而无法正常打开(没错,我说的就是 可执行程序 的映像)。软链接的文件类型统一为 “.symlink”
“硬链接” 我认为是要和源文件保持一致。硬链接的文件类型与源一致。

其次是 映像源(目标文件) 之间的关系:
“快捷方式” 这东西按照windows的规则打开,执行,并且在一定程度上,能够传递参数。
“软链接” 这玩意就是一个影子吧,比 “快捷方式” 要更像是影子,创建了软链接后,可以注意到,映像文件是没有大小的,文件大小和占用空间始终是 0字节 。如果源文件是命令行程序,则命令行标题为映像文件名,而实际开启的进程名为源文件名。包括反向寻找进程文件,也会导向到源文件处。
“硬链接” 这个比较特殊,我认为确实是创建了一个 源文件的副本,而映像和源又能够保持同步,在一边的内容发生改变时,另一边能够同步这些变化。然而,只有 硬链接 能够在源文件被删除掉后,仍然拥有内容,能够被打开。如果源文件是可执行程序,那么,从映像文件启动时,该进程的WorkDirectory会默认设置为映像文件所在文件夹。

创建方法

利用 New-Item 创建

“快捷方式” 这个太方便了,基本就是windows给用户用的。创建的方法也有很多,比如按住alt键再用鼠标拖拽等,这里不细说。

“软链接” 使用 New-Item 指令为:

PS C:\>New-Item -ItemType SymbolicLink -Path C:\image -Target C:\source.txt

这样,就为 C:\source.txt 创建了一个名为 image 的软链接映像。双击这个名为 image 的文件,即可打开。

“硬链接” 使用 New-Item 指令为:

PS C:\>New-Item -ItemType HardLink -Path C:\image.txt -Target C:\source.txt

这样,就为 source.txt 创建了一个名为 image.txt 的硬链接映像。

“Junction” windows中文件与文件夹是完全不同的两种类型,创建文件夹链接不可以使用 HardLink ,但是可以使用 Junction

PS C:\>New-Item -ItemType Junction -Path C:\test_image -Target C:\test_source

利用 msys 创建

还有一个偏门的方法,就是利用msys中的指令集来创建,msys中是附带有linux指令集的,也就包含有 ln 这个指令。结果和上面的方法基本一致。

利用cmd创建

PowerShell和CMD使用的是不同指令集。CMD的指令理论上在win7上也能使用。在CMD中可以使用 mklink 指令来创建链接。直接敲入这个指令可以看到使用帮助信息:

C:\>mklink创建符号链接。MKLINK [[/D] | [/H] |[/J]] Link Target    /D      创建目录符号链接。默认为文件符号链接。    /H      创建硬链接而非符号链接。    /J      创建目录链接。    Link    指定新的符号链接名称。    Target  指定新链接引用的路径(绝对或相对)。  

引用

  1. Microsoft Doc - New-Item