win10下使用mklink命令给C盘软件搬家
在windows下,大多数软件会默认安装在C盘,即使小心翼翼地点开“自定义”->“安装路径”,然后把软件安装到其他盘,还是会有很多软件用到的数据文件被塞到C盘,虽然可以到注册表修改软件默认安装路径以及数据存储路径,然而emmm...并没有多大用处,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"
以上例子只是方便理解,实际操作不太推荐使用剪切,而应该把文件夹复制过去,没问题了再把原来文件删除,避免数据丢失,数据无价,谨慎操作。
使用NTFSLinksView这个软件可以查看系统中的符号链接和目录联接,Symbolic Link就是符号链接,Junction是目录联接。win10下很多地方都使用的Junction,例如“开始菜单”,“我的文档”这些目录。
win10下使用mklink命令给C盘软件搬家的更多相关文章
- win7下用mklink命令解决delphiXE系列占用C盘空间的问题
DelphiXE从2010以后, 安装程序安装完成后都会在ProgramData目录里复制一份安装程序的备份, 随着版本升级安装包越来越大, 占用C盘的空间也就越来越大 虽然可以通过删除的方式删掉, ...
- 在shell下,用命令将U盘挂载到ubuntu上,并将文件copy到U盘里面
首先将鼠标定位到ubuntu上,然后插上U盘,这时候先用指令: fidsk -l 查看一下U盘,(这是应该有一个盘符了) 如果没有的话,就尽享下面的步骤: 首先使用命令查看是那个分区,在U盘插入前后, ...
- Windows下使用mklink命令参数介绍
Windows下创建符号链接使用命令mklink常用参数有 /D /J,两者有比较明显的区别 区别1:创建/D 创建目录符号链接(即目录快捷方式)而不是文件符号链接(默认为文件符号链接),可以使用相对 ...
- win10下使用Linux命令
下载Cygwin安装包 官网下载地址:https://cygwin.com/install.html 执行下载好的安装程序 选择默认安装路径C:\cygwin64即可,可在C:\cygwin64\bi ...
- win10 下常用shell命令
shell脚本命令 单行过长如何换行 在一行的结尾加上^即可 , 打印当前目录 %cd%
- Windows 7 mklink命令详解
mklink是Windows 7下的一个类似于linux下In的命令,其作用是在NTFS文件系统中创建文件或目录的链接(类似于桌面快捷方式).如果加以利用其发挥的作用是非常的大的,不仅可以帮助我们节省 ...
- mklink命令转移win7系统盘文件夹users和programdata(附xp的方法)
mklink命令转移win7系统盘文件夹users和programdata(附xp的方法) 使用mklink命令转移文件夹清理臃肿的c盘 (一) 我的 ...
- linux下创建可引导的U盘系统,使用dd命令进行Linux的ghost
1,通过iso创建可引导的U盘系统. 1.0,格式化U盘为FAT32格式 linux下能够使用命令: mkfs.vfat U盘的设备路径 比如: mkfs.vfat /dev/sdb 当中U盘的路径能 ...
- 在Mac OS X系统下 用dd命令将iso镜像写入u盘
一. Mac下将ISO写入U盘可使用命令行工具dd,操作如下: 1.找出U盘挂载的路径,使用如下命令:diskutil list2.将U盘unmount(将N替换为挂载路径):diskutil unm ...
随机推荐
- protobuf DNK下的编译
protobuffer 编译配置 mkdir -p ./cmake/build cd ./cmake/build cmake \ -Dprotobuf_BUILD_SHARED_LIBS=OFF \ ...
- poj 2442 Sequence (Priority Queue)
2442 -- Sequence 真郁闷,明明方法是对的,为什么我的代码老是那么的慢._(:з」∠)_ 这题要想考虑两列的情况,然后逐列拓展. 代码如下: #include <cstdio> ...
- <STL源码剖析> 6.3.6 power
计算power的算法说明 http://www.sxt.cn/u/324/blog/2112 翻译自 http://videlalvaro.github.io/2014/03/the-power-a ...
- 买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
买房的贷款时间是否是越长越好?https://www.zhihu.com/question/20842791
- Mac PHPStorm清除SVN配置缓存
- H3C DHCP服务器可选配置
- HTML是什么?
HTML,即超文本标记语言,它不是一种编程语言,而是一种标记语言,是网页制作所必备的.“超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素.超文本标记语言的结构包括“头”部分.和“主体 ...
- [数论] hdu 5974 A Simple Math Problem (数论gcd)
传送门 •题意 一直整数$a,b$,有 $\left\{\begin{matrix}x+y=a\\ LCM(x*y)=b \end{matrix}\right.$ 求$x,y$ •思路 解题重点:若$ ...
- 利用Aspose.cells 将查询出的数据导出为excel,并在浏览器中下载。
正题前的唠叨 本人是才出来工作不久的小白菜一颗,技术很一般,总是会有遇到一些很简单的问题却不知道怎么做,这些问题可能是之前解决过的.发现这个问题,想着提升一下自己的技术水平,将一些学的新的‘好’东西记 ...
- 用Qt写的简单屏保程序
近日老大提别人家产品都有屏保程序,貌似我们也该有,简单在qtcn.org请教了一下,写了个小程序! 晕倒,半天没找到上传功能!我已经上传到qtcn上了,地址如下: http://www.qtcn.or ...