分享

[Mklink,Junction,Icacls] 利用批处理生成用户配置文件中的 Junction

 逗咳嗽 2015-11-08

最近新配了台主机,在老板的极力推荐下,上了块 SSD 当系统盘,那速度,果真是一个大四个叉,爽!!!大笑


上网查了查,发现使用 SSD 还有不少讲究,主要目的是为了延长硬盘的使用寿命,其中有关转移用户配置文件并利用 mklink 命令进行文件夹链接的文章引起了我的兴趣。由于以前 N 次重装系统留下的备份文件实在太乱,而且重复的文件太多,所以准备仔细整理一番,然后用 mklink 将用户文件设置到其它盘去。经过几天的折腾,终于成功将 C:\Users 中的用户文件夹给链接到了 D 盘了,其间发生了各种状况,在此和大家分享下经验和教训。


折腾之前,先普及下基础知识:

Windows (Vista/Win7/Win8) 自带的 mklink 命令可以设置文件和文件夹链接,也叫接合点或解析点,可以通过 dir /a:l 进行查看。


如图中所示,文件或文件夹前具有 <JUNCTION> 标记的,就是接合点。


Junction:连接点或接合点,图标类似快捷方式,当用户对其进行访问时,读写操作实际上是附加在接点所指向的文件或文件夹上的。

比如:Win7 中的 "C:\Documents and Settings",用户目录中的 "Application Data"、"My Documents" 等。



mklink 是用来创建 Junction 的命令,具体使用方法请参考:符号链接Mklink 详解 和 Windows 7 中的 mklink 命令

好吧,Let's 折腾奋斗

本文以 Administrator 作为示例用户,要做的就是将用户配置目录 C:\Users\Administrator 链接到 D:\Admin。

操作共分3个步骤:

1、用 WinPE 复制 C:\Users\Administrator 文件夹到 D:\Admin 中。

我的系统是 Win8,曾使用 robocopy 命令来复制用户目录,不幸的是未能成功:

  1. robocopy "C:\Users\Administrator" "D:\Admin" /copyall /e /xj  

总结下失败的原因:

a、本打算偷懒,将 Administrator 中的 Junction 一起复制到 D 盘,所以去掉了 /xj 参数。后果是出现了循环复制,原来 Application Data 指向的目录存在循环引用。仔细想想,因为移动了 Administrator 文件夹,原有 Juncation 的目标也就失效了,所以必须添加 /xj 参数。

b、加上 /xj 参数后,复制成功,但提示有的文件夹无访问权限,不过我没理会。事实证明,这是不对的,因为复制完成后,C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Libraries 无权删除,这还让我怎么建立 Junction 啊~~抓狂

c、利用系统自带的用户配置文件管理进行复制、删除,也出现了无权访问的状况 委屈

d、据说安全模式可以搞定,可 Shift+F8 都按陷下去了,也没能进入 Win8 的安全模式,真尼玛丢人啊!发火

最终我还是选择了 WinPE 环境复制配置文件,而且一次搞定。

友情提醒:

Windows 8 OS,建议用 Administrator 账号登录系统,并点开应用商店逛逛,是否下载应用倒无所谓,否则,折腾完后你会惊喜的发现无法从应用商店中安装应用了!尴尬


2、重命名 C:\Users\Administrator 和 D:\Administrator 文件夹。

为了保险起见,C:\Users\Administrator 文件夹不要删除,可以重命名为 Administrator.BAK

D:\Administrator 重命名为 Admin


3、利用 mklink 建立文件夹链接:

  1. mklink /j "C:\Users\Administrator" "D:\Admin"  

注:在 WinPE 中也能使用 mklink 命令,可由于缺少环境变量的设定,所以进入系统目录才能执行。


4、在 D:\Admin 文件夹中建立如 "Application Data"、"Cookies" 等 Junction 接合点。

让我们用 dir /s /a:l 命令查看下 Administrator 文件夹中的所有 Juncation:

由于目录中的 Junction 比较多,而且分散在不同的子目录中,所以我编写了一个批处理来完成这项工作。为了和原用户目录中的 Junction 保持一致,又在批处理中增加了 attrib 和 icacls 命令,作用是分别为这些 Junction 设置系统、隐藏等属性,并添加了拒绝用户访问的权限。


上脚本咯~~!

  1. d:  
  2. cd\  
  3. cd Admin  
  4.   
  5. rem mklink  
  6.   
  7. mklink /j "Application Data" "AppData\Roaming"  
  8. mklink /j "Cookies" "AppData\Roaming\Microsoft\Windows\Cookies"  
  9. mklink /j "Local Settings" "AppData\Local"  
  10. mklink /j "My Documents" "Documents"  
  11. mklink /j "NetHood" "AppData\Roaming\Microsoft\Windows\Network Shortcuts"  
  12. mklink /j "PrintHood" "AppData\Roaming\Microsoft\Windows\Printer Shortcuts"  
  13. mklink /j "Recent" "AppData\Roaming\Microsoft\Windows\Recent"  
  14. mklink /j "SendTo" "AppData\Roaming\Microsoft\Windows\SendTo"  
  15. mklink /j "Templates" "AppData\Roaming\Microsoft\Windows\Templates"  
  16. mklink /j "「开始」菜单" "AppData\Roaming\Microsoft\Windows\Start Menu"  
  17.   
  18. mklink /j "AppData\Local\Application Data" "AppData\Local"  
  19. mklink /j "AppData\Local\History" "AppData\Local\Microsoft\Windows\History"  
  20. mklink /j "AppData\Local\Temporary" Internet Files "AppData\Local\Microsoft\Windows\Temporary Internet Files"  
  21.   
  22. mklink /j "AppData\Roaming\Microsoft\Windows\Start Menu\程序" "AppData\Roaming\Microsoft\Windows\Start Menu\Programs"  
  23.   
  24. mklink /j "Documents\My Music" "Music"  
  25. mklink /j "Documents\My Pictures" "Pictures"  
  26. mklink /j "Documents\My Videos" "Videos"  
  27.   
  28. rem attrib  
  29.   
  30. attrib +s +h +i "Application Data"  
  31. attrib +s +h +i "Cookies"  
  32. attrib +s +h +i "Local Settings"  
  33. attrib +s +h +i "My Documents"  
  34. attrib +s +h +i "NetHood"  
  35. attrib +s +h +i "PrintHood"  
  36. attrib +s +h +i "Recent"  
  37. attrib +s +h +i "SendTo"  
  38. attrib +s +h +i "Templates"  
  39. attrib +s +h +i "「开始」菜单"  
  40.   
  41. attrib +s +h +i "AppData\Local\Application Data"  
  42. attrib +s +h +i "AppData\Local\History"  
  43. attrib +s +h +i "AppData\Local\Temporary"  
  44.   
  45. attrib +s +h +i "AppData\Roaming\Microsoft\Windows\Start Menu\程序"  
  46.   
  47. attrib +s +h +i "Documents\My Music"  
  48. attrib +s +h +i "Documents\My Pictures"  
  49. attrib +s +h +i "Documents\My Videos"  
  50.   
  51. rem icacls  
  52.   
  53. icacls "Application Data" /deny Everyone:(S,RD)  
  54. icacls "Cookies" /deny Everyone:(S,RD)  
  55. icacls "Local Settings" /deny Everyone:(S,RD)  
  56. icacls "My Documents" /deny Everyone:(S,RD)  
  57. icacls "NetHood" /deny Everyone:(S,RD)  
  58. icacls "PrintHood" /deny Everyone:(S,RD)  
  59. icacls "Recent" /deny Everyone:(S,RD)  
  60. icacls "SendTo" /deny Everyone:(S,RD)  
  61. icacls "Templates" /deny Everyone:(S,RD)  
  62. icacls "「开始」菜单" /deny Everyone:(S,RD)  
  63.   
  64. icacls "AppData\Local\Application Data" /deny Everyone:(S,RD)  
  65. icacls "AppData\Local\History" /deny Everyone:(S,RD)  
  66. icacls "AppData\Local\Temporary" /deny Everyone:(S,RD)  
  67.   
  68. icacls "AppData\Roaming\Microsoft\Windows\Start Menu\程序" /deny Everyone:(S,RD)  
  69.   
  70. icacls "Documents\My Music" /deny Everyone:(S,RD)  
  71. icacls "Documents\My Pictures" /deny Everyone:(S,RD)  
  72. icacls "Documents\My Videos" /deny Everyone:(S,RD)  

将上面的命令行保存为 bat 文件,然后在 cmd 命令行中执行就可以啦~希望这个脚本对大家有用处。


其实,我自己使用的是另一个方法,修改了注册表里

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\[User SID]\ProfileImagePath

中的值,这个方法弊端比较多,建议大家不要随意使用。





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多