利用mklink指令清理c盘
发表于:2024-03-05 | 分类: CMD

利用mklink指令清理c盘

今天发现c盘满了,想清理一下,但是面对c盘中的文件又不敢轻举妄动。在不清楚文件作用的情况下,直接删除文件还是有风险的。那么有没有什么方法可以保留文件但是同时又把c盘中的空间清理出来呢?带着这个问题,我打开搜索引擎,果然发现了符合我需求的办法。

没错,解决方案就是windows系统自带的指令——mklink,当我们在cmd输入mklink /?时,控制台会返回以下内容

1
2
3
4
5
6
7
8
9
MKLINK [[/D] | [/H] | [/J]] Link Target

/D 创建目录符号链接。默认为文件
符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径
(相对或绝对)。

windows链接类型

为了看懂控制台给出的用法,我查询了windows的各个链接类型以及他们的区别

  1. 快捷方式(Shortcut):这个是最常见的链接类型了,我就不过多介绍

  2. 符号链接(Symbolic Link):符号链接的路径可以是相对路径或绝对路径,可以是目录或文件,不占空间,可以跨本地磁盘,也可以跨网络磁盘(共享目录)。源目录移动、重命名或删除后,链接目录无效;链接目录删除,源目录不受影响;源目录里面的文件发生变化时(新增、修改、删除),链接目录里面的文件同步发生变化,反之,同样成立。

  3. 联接(Junction):联接的路径只能是绝对路径,只能是目录,不占空间,只能跨本地磁盘。其他与符号链接差别不大。

  4. 硬链接(Hard Link):硬链接的路径只能是绝对路径,占用空间和源文件一样且只能是文件。源文件删除后,链接文件无效;链接文件删除,源文件不受影响;只有将源文件和链接文件全部删除时,才会将文件真正的删除;当源文件内容发生变化时(修改),链接文件同步发生修改,反之,同样成立。

文件符号链接操作

作为测试,我首先在E盘和F盘各创建一个test文件夹。并创建了E:\test\text1.txtF:\test\text2.txt两个文件。然后运行指令

1
mklink E:\test\text1.txt F:\test\text2.txt

但是控制台给我一个报错

1
当文件已存在时,无法创建该文件。

于是我删除了E:\test\text1.txt,然后再次运行指令,控制台返回了

1
为 E:\test\text1.txt <<===>> F:\test\text2.txt 创建的符号链接

此时E:\test下多出了一个叫test1.txt的文件,并且有一个类似超链接的标志,我在任意一个txt文件中修改内容,另一个则会同步改变。

目录符号链接操作

与文件符号链接一样,我们现在F:\test下创建了一个target的文件夹,然后运行

1
2
mklink /d E:\test\link F:\test\target
为 E:\test\link <<===>> F:\test\target 创建的符号链接

现在E:\test又出现一个link文件夹,这个文件夹与target也是同步变化的,最重要的是,这个link文件夹是不占空间的,也就是说,我们可以利用这种方法将c盘的一些文件夹作为link符号链接到target上,以达到清理c盘空间的目的。

目录联接操作

1
2
mklink /j E:\test\link F:\test\target
为 E:\test\link <<===>> F:\test\target 创建的联接

在这个例子中与目录符号链接的效果差别不大

硬链接操作

我们将E:\test\清空并创建F:\test\text2.txt,执行

1
mklink /h E:\test\text1.txt F:\test\text2.txt

系统报错

1
系统无法将文件移到不同的磁盘驱动器。

差点忘了硬链接不能跨本地磁盘

重新执行命令

1
mklink /h F:\test\text3.txt F:\test\text2.txt

运行成功

1
为 F:\test\text3.txt <<===>> F:\test\text2.txt 创建了硬链接

小结

今天通过清理c盘的契机了解到mklink指令,并深入了解(虽然也不是很深入)了windows系统上不同的链接类型。如果大家有什么想补充或者纠错的,请在评论区留言~

上一篇:
使用python脚本自动操作微信小程序
下一篇:
CREATE行为漏斗模型