转自:http://www.cnblogs.com/asion/archive/2011/03/10/1979282.htmlphp
换了新电脑,终于再次使用上啦WIN7 ,通过一个周天天重装N次系统,终于弄好一个像样的系统啦。因为使用rt7lite对WIN7SP1官方整合包进行了适当精简,因此最终系统的稳定性还得通过一段时间的使用才能知道。其中在安装的时候,仅仅为系统盘(C盘)分配了10G的磁盘空间,而装完后就占用了8G以上空间,再想装上工做软件,就明显不足了。因而网搜方法对系统进行再度的减肥的时候,发现了WIN7的一个新工具【MKLINK】,可以对系统文件或文件夹进行连接或联接。这但是个好工具,因此对其功能进行一番试用,如下是过后的小小总结,提供给有须要的朋友。html
在CMD命令行输入mklink /?,能得到如下帮助:windows
建立符号连接。缓存
MKLINK [[/D] | [/H] | [/J]] Link Target安全
/D 建立目录符号连接。默认为文件
符号连接。
/H 建立硬连接,而不是符号连接。
/J 建立目录联接。
Link 指定新的符号连接名称。
Target 指定新连接引用的路径
(相对或绝对)。工具
在此,我仅仅对建立目录的连接进行试用,因此如下讨论的皆是有关目录方面的。测试
在帮助里面,这两个参数的解释,一个是“连接”,一个是“联接”,仅仅一字之差。字面上的解释或系统层次上的理论解释,我没法深究,只好经过实践来比较二者的区别。spa
使用/d参数命令建立一个连接:.net
mklink /d "Temp.link" "F:\SystemCache\Temp"命令行
使用/J参数命令建立一个联接:
mklink /J "Temp.link" "F:\SystemCache\Temp"
文件夹属性,显示如图所示:
其中一眼就能够看到的区别就是,使用/D参数建立的“连接”,属性里面多了一项“快捷方式”选项卡。
同时在CMD命令行里面DIR显示目录的时候,显示的也是有所区别的,如图:
其中参数/D对应的是<symlinkd>而参数/J对应的是<junction>。网搜的时候,网上有人留意到微软系统本身使用的都是<junction>,在此继续留待考证。
表面的区别很是明显啦,而咱们关注的是在实际操做过程当中,二者又都有啥区别呢?首先咱们对于一个文件夹的操做不外乎“复制,剪切,删除”,因此依次对两个文件夹进行测试,结果以下。
【复制】的测试为:将两个文件夹同时复制,并在当前文件夹粘帖,最终结果以下:
结论:
不管做为连接仍是联接,日常的复制操做都是对"源目录" 的进行拷贝,而不是复制自身的连接或联接属性。要想实现复制自身,而不是所指向的目录,可使用网上介绍的方法,即在命令行下使用Xcopy 带/B参数来进行复制。
【剪切】的测试为:同时剪切两个文件夹,粘贴到D 盘。效果以下:
结论:
对于连接后的文件夹,没法对其进行剪切操做。而联接的文件夹能够被移动,可是不知道有啥意义。(此处对联接后文件夹的测试不是很严谨,留待好心的朋友指正)
【删除】的测试:(从新建立后)对两个文件夹直接右键删除。
花了大篇幅介绍了两个参数的区别,或许有点多余,可是在实际决定要使用哪一个参数建立时,多少有了些直观的参考。在这里我我的使用的是/D参数,由于它多了一个“快捷方式”标签方便“打开文件夹位置”,仅此而已。
一样网上也有不少关于如何使用MKLINK来转移win7文件夹位置的文章,你们能够一块儿参考:
在这里一样须要用到一个小工具:PendMoves.zip,将其解压放入系统盘的system32,就能在CMD命令行中任意调用了,固然也能够直接CD进入解压后的文件夹,再使用也能够。
这个文件夹我认为是比较安全的,至少操做失败不会形成系统崩溃。
其中系统里面一共有两个TEMP变量,一个是用户临时变量,一个是系统临时变量。首先就是按照参考连接3里面学到的思想,进行文件转移。使用以下代码新建连接:
@mklink /d "C:\Users\Administrator\AppData\Local\Temp.link" "F:\SystemCache\Temp"
@mklink /d "C:\Windows\Temp.link" "F:\SystemCache\Temp"
而后就是使用Pendmoves里面的Movefile工具,在重启以后重命名或删除文件夹。
@movefile "C:\Users\Administrator\AppData\Local\Temp" ""
@movefile "C:\Users\Administrator\AppData\Local\Temp.link" "C:\Users\Administrator\AppData\Local\Temp"
@movefile "C:\Windows\Temp" ""
@movefile "C:\Windows\Temp.link" "C:\Windows\Temp"
由于是临时文件,因此第一句就是直接删除文件夹,而后再把创建的连接重命名为Temp便可。
这里要说明一点就是,我并非将整个Administrator的目录进行转移,而是仅仅对里面的AppData文件夹有针对的转移。缘由有二,一个是我不须要保存Administrator根目录下的DAT文件,二个是这个目录里面有不少文件夹也是联接式的文件夹。一旦转移整个文件夹,从上面的区别中,咱们知道,符号自己将没法经过普通复制一个副本,这也就可能形成未知的系统问题。因而,我就对AppData目录下的单个文件夹进行转移。
一样,由于AppData目录下的Local文件夹内也有几个是联接式的文件夹,因此再次单独的将其分类开,分别进行转移。
第一步:将Local下Microsoft文件夹,LocalLow和Roaming的文件所有复制到目标路径中;(在此可能须要获取“管理员权限”,方法请网搜。)
第二步:再执行相应代码进行转移。
如下是AppData下,没有特殊文件夹的相应转移批处理代码:
@mklink /d "C:\Users\Administrator\AppData\LocalLow.link" "F:\SystemCache\LocalLow"
@movefile "C:\Users\Administrator\AppData\LocalLow" "C:\Users\Administrator\AppData\LocalLowMoved"
@movefile "C:\Users\Administrator\AppData\LocalLow.link" "C:\Users\Administrator\AppData\LocalLow"
@mklink /d "C:\Users\Administrator\AppData\Roaming.link" "F:\SystemCache\Roaming"
@movefile "C:\Users\Administrator\AppData\Roaming" "C:\Users\Administrator\AppData\RoamingMoved"
@movefile "C:\Users\Administrator\AppData\Roaming.link" "C:\Users\Administrator\AppData\Roaming"
如下是AppData目录下的Local文件夹的转移代码,仅仅对Microsoft文件夹转移。
@mklink /d "C:\Users\Administrator\AppData\Local\Microsoft.link" "F:\SystemCache\Local\Microsoft"
@movefile "C:\Users\Administrator\AppData\Local\Microsoft" "C:\Users\Administrator\AppData\Local\MicrosoftMoved"
@movefile "C:\Users\Administrator\AppData\Local\Microsoft.link" "C:\Users\Administrator\AppData\Local\Microsoft"
第一步:将Microsoft文件夹的文件所有复制到目标路径中;(在此可能须要获取“管理员权限”,方法请网搜。)
第二步:再执行相应代码进行转移
@mklink /d "C:\ProgramData\Microsoft.link" "F:\ProgramData\Microsoft"
@movefile "C:\ProgramData\Microsoft" "C:\ProgramData\MicrosoftMoved"
@movefile "C:\ProgramData\Microsoft.link" "C:\ProgramData\Microsoft"
我的经验:在整个转移此文件夹以后,会使得“云端”没法正常捕获缓存。即,没法正常完成手动安装到云端,可以使用,可是不正常!
因此,这里提供两个版本。全部版本的第一步:都是将文件夹内的文件所有复制到目标路径中。
整个目录转移:
@mklink /d "C:\Program Files.link" "D:\Program Files C"
@movefile "C:\Program Files" "C:\Program Files Moved"
@movefile "C:\Program Files.link" "C:\Program Files"
分开转移:
@mklink /j "C:\Program Files\Common Files" "D:\Program Files C\Common Files"
@mklink /j "C:\Program Files\InstallShield Installation Information" "D:\Program Files C\InstallShield Installation Information"
@mklink /j "C:\Program Files\Internet Explorer" "D:\Program Files C\Internet Explorer"
@mklink /j "C:\Program Files\Reference Assemblies" "D:\Program Files C\Reference Assemblies"
@mklink /j "C:\Program Files\Windows Defender" "D:\Program Files C\Windows Defender"
@mklink /j "C:\Program Files\Windows Journal" "D:\Program Files C\Windows Journal"
@mklink /j "C:\Program Files\Windows Mail" "D:\Program Files C\Windows Mail"
@mklink /j "C:\Program Files\Windows Media Player" "D:\Program Files C\Windows Media Player"
@mklink /j "C:\Program Files\Windows NT" "D:\Program Files C\Windows NT"
@mklink /j "C:\Program Files\Windows Photo Viewer" "D:\Program Files C\Windows Photo Viewer"
@mklink /j "C:\Program Files\Windows Portable Devices" "D:\Program Files C\Windows Portable Devices"
说明:由于这个文件夹里面的目录众多,而且随着我的安装的软件不一样,数量各不相同,因此通常不推荐转移此文件夹。
一旦使用Movefile建立任务计划以后,可使用Pendmoves检查总共建立的任务数。这里额外补充一个内容就是:当你建立的计划是错误的,好比Movefile使用的路径有误,或者你想取消Movefile计划等等,可使用一下方法:
打开注册表,查找路径“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager”,删除"PendingFileRenameOperations"的值就能够了。
如下是官方原理说明:http://technet.microsoft.com/en-us/magazine/2009.06.utilityspotlight.aspx
不过里面讲解的注册表路径不许确。