今天准备转移文件的时候突然想到,之前一直使用mklink /j <This> <Target>做链接,那么/d有什么作用?

经过测试,

不加参数,类似于”.lnk”文件的功能,当前文件是目标文件的一个快捷方式,对当前文件的操作将不会重定向到目标文件,并且当前文件可以随意移动到其他任意目录的同时,保持对目标的引用.

/d参数下,类似于”.lnk”文件的功能,当前文件夹是目标文件夹的一个快捷方式,对当前文件夹的操作将重定向到目标文件夹,并且当前文件夹可以随意移动到其他任意目录的同时,保持对目标的引用.

/j参数下,当前文件夹是对目标的直接引用,且只能对文件夹引用,同时当前文件夹不能随意移动到其他目录,否则会在其他目录创建同名目录并将目标文件夹的内容转移到新目录.

这里假设当前目录为”C:\”,

mklink /d This C:\Windows\Temp\这行命令将在当前目录创建一个名为”This”的快捷方式,双击将呈现”C:\Windows\Temp\”的内容,也就是”C:\This\”双击打开后,呈现的是”C:\Windows\Temp\”的内容.但”This”文件夹本身其实是一个文件,如果我执行”del C:\This\1.tmp”理论上等同”del C:\Windows\Temp\1.tmp”,但实际上根据情况有不同的结果.

mklink /j This C:\Windows\Temp\这行命令将在当前目录创建一个名为”This”的文件夹,操作效果等同”/d”参数,但由于”/j”创建的是文件夹,所以不可能出现操作失败的情况.

简单点来说,

不加参数其实就相当于右键的”发送到XXX的快捷方式”,区别就是”发送到XXX的快捷方式”允许你更改一些快捷方式的属性,同时占用一些磁盘空间,而mklink(不加参数)产生的引用不会占用磁盘空间.

而”/d”参数基本与不加参数的效果是一样的,区别就是一个适用于文件,一个适用于目录.

“/j”则是专用于文件夹引用,一个典型的应用场景,将Chrome的默认缓存目录从”C:\Users\Adminer\AppData\Local\Google\Chrome\User Data\Default”联结到”D:\Temp\ChromeTemp\”后,chrome的数据将实际写入”D:\Temp\ChromeTemp\”.