使用mklink命令帮助C盘搬家

发布于 2022-11-29  6,971 次阅读


AI 摘要

本文介绍了Windows自带命令mklink的使用方法,该命令可帮助用户将软件安装和数据储存目录从C盘搬家。通过/examples,详细介绍了mklink命令的用法和实例,包括创建文件符号链接、创建目录符号链接、创建目录联接等。通过使用mklink命令,用户可以将文件或目录链接至不同位置,实现软件数据的迁移。需要注意的是,使用mklink命令需要管理员权限,且每个参数的使用需要谨慎,确保链接操作正确无误。

现在的很多软件,例如ChromeEdge这类软件的默认安装和数据储存目录都是C盘,久而久之C盘的空间就会被吃干抹净。
不过Windows支持一个命令——mklink,它可以帮助你给C盘搬家。

一、简介

mklink命令是Windows自带的命令,是必须使用管理员权限的,否则会提示“你没有足够的权限执行此操作。”
既然是Windows自带的命令,我们打开cmd,看看Windows给这个命令的用法是什么。输入:mklink /?

可能看着不是很明白,下面我会针对每个参数举例,让各位能够更好理解。
为了方便举例,我在D:\jipa233里面分别创建了两个文件夹LinkTarget

二、创建文件符号链接:mklink

什么参数都不带,就是默认创建文件符号链接。使用这个命令是需要管理员权限的。
D:\jipa233\Target文件夹创建一个示例文件.txt,然后以管理员身份运行cmd,输入以下命令:

mklink D:\jipa233\Link\示例文件.txt D:\jipa233\Target\示例文件.txt

输出结果如下:

这时候,我们打开Link文件夹,就会发现下面出现了一个类似于快捷方式的文件:

但是这个示例文件.txt并不是快捷方式,是一个符号链接,我们可以在Link文件夹下面正常打开和使用,但是实际上这个文件是存储在Target文件夹下的。
这样相当于两个不同的文件夹下面出现了两个相同的文件,对这两个文件编辑哪个都会同时改变。

三、创建目录符号链接:mklink /D

以管理员身份运行cmd,输入以下命令:

mklink /D D:\jipa233\Link2 D:\jipa233\Link

输出结果如下:

这时候我们会发现jipa233文件夹下面多了个Link2文件夹

同样这个也不是快捷方式,相当于一个虚拟的文件夹,而这个文件夹真正存储位置是D:\jipa233\Link,同样可以正常在D:\jipa233\Link2目录下进行存储文件不占用这个文件夹的空间。
我们查看Link2文件夹的属性,发现目标是D:\jipa233\Link

创建的符号链接显示的类型是文件夹,实际上相当于是指向D:\jipa233内真实的Link文件夹的快捷方式,符号链接本身不占空间。路径映射的过程对软件来说是透明的,软件对这个符号链接的操作实际上是对Link文件夹的操作,因此软件可以正常运行。

四、创建目录联接:mklink /J

这个参数跟/D参数非常相似,而且这个命令无需管理员权限。
关于这个参数的介绍我找到了其他博主描述的一段话:

“目录联接”只能应用于文件夹,不可用于文件。 根据网上能找到的资料显示,对文件夹创建的“目录联接”与“符号链接”并没有区别,一样可以实现软件数据的迁移。不过貌似这两者对剪切操作有不一样的表现。
例如,我现在在D盘创建“文件夹A”, 在“文件夹A”里新建A.txt,然后在D盘根目录创建一个“目录联接B”指向这个“文件夹A”,通过这个“目录联接B”,我可以访问到A.txt;接着我对“目录联接B”进行剪切操作,剪切到其它地方(C盘),发现“文件夹A”和“目录联接B”还是在D盘,即原来的地方,但是打开却发现A.txt不见了,被剪切到了C盘的“文件夹B”中,也就是说对“目录联接”的剪切操作会影响原来的文件。
对于这其中的机制,找了很多资料都没提到这个问题,到stackoverflow提问又没人回答。。。 感觉“目录联接”跟“符号链接”有点像,给文件夹里的内容提供一个“入口”即所谓的“联接点”,剪切操作时会通过这个“联接点”把内容剪切出来,原来的目录和“联接点”虽然没有变化,但里面的内容被剪切出来了。 而“符号链接”的剪切操作仅仅是对这个“符号链接”的剪切,并不会透过这个“符号链接”把其内容剪切掉。
以上描述可能稍微有点乱,最好还是亲自试验一下。
—— LifeOfCoding

运行cmd,输入以下命令:

mklink /J D:\jipa233\Link2 D:\jipa233\Link

输出结果如下:

这时候D:\jipa233下同样还是出现了Link2文件夹

但这个和/D参数区别是,他们两个的属性不同,/J参数创建的Link2文件夹的位置就是D:\jipa233\Link2,好像这个文件夹就存在这里一样,但实际上文件还是储存在D:\jipa233\Link的位置。

五、创建硬链接:mklink /H

D:\jipa233创建一个Link.txt,然后以管理员身份运行CMD,输入以下命令:

mklink /H D:\jipa233\Link2.txt D:\jipa233\Link.txt

输出结果如下:

这时候D:\jipa233下出现了Link2.txt文件

看起来这就是一个文件,没有快捷方式角标。
我们修改Link.txt,会发现原来的Link2.txt里的内容同样改变了。也就是这实际上是同一个文件。
在文件资源管理器上看,“Link2.txt”与“Link.txt”占用同样大小的空间,其实这个数据并不用去理会,硬链接相当于给文件的数据多创建了一个“入口”,“Link.txt”、“Link2.txt”指向的是硬盘中的同一块区域,因此这两个文件的内容是完全一样的,编辑任何一个文件都会影响到另一文件,当删除其中一个文件,只是删除这个文件其中一个“入口”,要两个文件都删除,文件系统才会标志这块硬盘区域上的文件被删除。

六、结语

以上就是针对mklink命令的演示和讲解,各位看过之后应该也能大概了解mklink命令的使用了,我们既可以把文件“虚拟”到别的目录甚至分区,也可以把文件夹虚拟到别的地方。这样对于我们C盘搬家的工作十分有帮助。
不过请各位注意,并不是C盘所有文件夹都可以这么处理,特别是系统文件夹,有时候会容易出现错误,一定要慎用。