win10下使⽤mklink命令给C盘软件搬家在windows下,⼤多数软件会默认安装在C盘,即使⼩⼼翼翼地点开“⾃定义”->“安装路径”,然后把软件安装到其他盘,还是会有很多软
件⽤到的数据⽂件被塞到C盘,虽然可以到注册表修改软件默认安装路径以及数据存储路径,然⽽并没有多⼤⽤处,C盘还是会被塞满。
我C盘是SanDisk的SSD,虽然128G不算少,但是我分了⼗多G给PrimoCache做缓存,然后⼜装了很多很多的软件,C盘被塞得满满当当的,这时候需要把C盘上⼀些⽂件搬到其他盘。然⽽C盘⼤都是软件会⽤到的数据⽂件,直接Ctrl+X,Ctrl+V的话会出现很多问题,那么可不可以在搬家后给原来的路径搞个“代理”,把路径指向⽂件的实际地址?如下图所⽰:
接下来我们就试验下吧,先试着⽤快捷⽅式来实现搬家:
我这⾥把迅雷安装路径下整个⽂件夹剪切出来,然后在原来路径下放个快捷⽅式,然后双击桌⾯上的迅雷快捷⽅式,成功启动,并没有啥不妥,接下来换个⽅式:
把迅雷中的resources⽂件夹剪切出来,然后把快捷⽅式放进去,然后启动迅雷,emmm。。迅雷打不开了。
为什么会出现这样的问题,很简单,第⼀次操作是把迅雷整个⽂件夹剪切出来的,这个⽂件夹包含了迅雷运⾏的所需要的所有⽂件,第⼆次操作时,迅雷的程序不到resources⾥⾯的⽂件,所以就运⾏不起来了,那为什么把快捷⽅式放这⾥没有⽤呢。其实是因为快捷⽅式本质是个.ink⽂件,虽然我们在资源浏览器双击这个快捷⽅式,可以显⽰这个快捷⽅式指向的⽂件或⽂件夹,但是迅雷以及其它软件会直接把这个快捷⽅式当做.ink⽂件对待,不能访问到快捷⽅式指向的⽂件夹。因此不能简单地使⽤快捷⽅式进⾏软件搬家。
想要安全转移⽂件,就需要⽤到mklink命令,命令格式如下:
硬链接
mklink [/h] "link" "target"
通过上述命令就可以创建从“link”路径到“target”路径的硬链接,例如在D盘根⽬录下新建⽂本“A.txt”,然后输⼊命令如下即可创建
到"A.txt"的硬链接"B.txt":
注意:因为powershell不⽀持mklink命令,所以要在前⾯加cmd /c表⽰⽤cmd来运⾏该命令,路径注意引号,可以是相对路径也可以是绝对路径,硬链接只能⽤于⽂件,不能对⽂件夹创建硬链接,不然会提⽰“拒绝访问”。
在⽂件资源管理器上看,“B.txt”与“A.txt”占⽤同样⼤⼩的空间,其实这个数据并不⽤去理会,硬链接相当于给⽂件的数据多创建了⼀个“⼊⼝”,“A.txt”,“B.txt”指向的是硬盘中的同⼀块区域,因此这两个⽂件的内容是完全⼀样的,编辑任何⼀个⽂件都会影响到另⼀⽂件,当删除其中⼀个⽂件,只是删除这个⽂件其中⼀个“⼊⼝”,要两个⽂件都删除,⽂件系统才会标志这块硬盘区域上的⽂件被删除。
符号链接
对⽂件创建符号链接
mklink "link" "target"
对⽂件夹创建符号链接
mklink /D "link" "target"
符号链接是在⽂件系统上实现的链接,对操作系统上⼤多数软件来说是透明的,也就是说,当软件访问符号链接时,其实际上是在访问该符号链接所指向的⽂件(夹),再次拿迅雷做例⼦,先把迅雷的resource⽂件夹剪切到D盘根⽬录,然后在原来路径建⽴符号链接:
注意:软链接的创建需要管理员权限,确保cmd是管理员模式。对于⽂件夹的软链接创建,⼀定要加上"/D"。通过相对路径创建的软链接在移动后⽆法使⽤,绝对路径创建的移动后不影响使⽤。符号链接可以直接右键删除,或通过rmdir命令删除,不会影响原⽂件,但del命令则会把⽬标⽂件删除。
创建的符号链接显⽰的类型是⽂件夹,实际上相当于是指向D盘真实的resource路径的快捷⽅式,符号链接本⾝不占空间。路径映射的
过程对迅雷来说是透明的,迅雷对这个符号链接的操作实际上是对resource⽂件夹的操作,因此迅雷可以正常运⾏。另外,符号链接和⽬录联接是有快捷⽅式的那个箭头的,只不过我修改了注册表所以这⾥
不显⽰。符号链接与Linux下的软链接很相似,因此⽹上很多资料都会把ntfs的符号链接叫做软链接。此外,符号链接还可以连接远程的路径,命令如下:
mklink /D "D:\link" "\\123.123.0.1\D$\target"
⽬录联接
“⽬录联接”只能应⽤于⽂件夹,不可⽤于⽂件。根据⽹上能到的资料显⽰,对⽂件夹创建的“⽬录联接”与“符号链接”并没有区别,⼀样可以实现软件数据的迁移。不过貌似这两者对剪切操作有不⼀样的表现。
例如,我现在在D盘创建“⽂件夹A”, 在“⽂件夹A”⾥新建A.txt,然后在D盘根⽬录创建⼀个“⽬录联接B”指向这个“⽂件夹A”,通过这个“⽬录联接B”,我可以访问到A.txt;接着我对“⽬录联接B”进⾏剪切操作,剪切到其它地⽅(C盘),发现“⽂件夹A”和“⽬录联接B”还是在D盘,即原来的地⽅,但是打开却发现A.txt不见了,被剪切到了C盘的“⽂件夹B”中,也就是说对“⽬录联接”的剪切操作会影响原来的⽂件。
对于这其中的机制,了很多资料都没提到这个问题,到stackoverflow提问⼜没⼈回答。。。感觉“⽬录联接”跟“符号链接”有点像,给⽂件夹⾥的内容提供⼀个“⼊⼝”即所谓的“联接点”,剪切操作时会通过这个“联接点”把内容剪切出来,原来的⽬录和“联接点”虽然没有变化,但⾥⾯的内容被剪切出来了。⽽“符号链接”的剪切操作仅仅是对这个“符号链接”的剪切,并不会透过这个“符号链接”把其内容剪切掉。
以上描述可能稍微有点乱,最好还是亲⾃试验⼀下。
数据迁移
⽤Disk Space Fan 4对C盘进⾏扫描,发现Adobe的数据⽂件占⽤了1G多的空间,⽽这些数据根本⽤不着放固态浪费空间,于是可以把这个⽂件夹剪切到D盘合适路径下,这个路径由⾃⼰决定,放哪都可以。因为这个⽂件夹放在“C:ProgramData”,为了⽅便管理我在D盘也新建了ProgramData⽂件夹,然后把Adobe这个⽂件夹剪切过来。期间需要对⽂件夹的权限做下处理,因为部分软件对⽂件夹设了权限,只有赋予了权限才能移动、编辑⽂件夹。需要注意的是,在移动⽂件时要先把软件相关的进程和服务关闭。⽂件传输结束后输⼊命令:
mklink /d "C:\ProgramData\Adobe" "D:\ProgramData\Adobe"
以上例⼦只是⽅便理解,实际操作不太推荐使⽤剪切,⽽应该把⽂件夹复制过去,没问题了再把原来⽂件删除,避免数据丢失,数据⽆价,谨慎操作。powershell创建目录
很多地⽅都使⽤的Junction,例如“开始菜单”,“我的⽂档”这些⽬录。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论