update @ 2009年5月21日0:06:42
更新了“高级移动部分”
砼砼的机器是老机器,硬盘很小只有80G,所以C盘更小,只有13.4GB,微软设计了比如:我的文档、我的OOXX,之类的东西,在WIN7下面更连游戏、下载等等目录都设计好了,我也很乖巧的把各种文件都分门别类的放进去了。
同时也很厉害的设计在了“%HOMEDRIVE%”里面,各种的资料,这种软件的配置就全给放进去了
在XP的时候对于C盘的要求还不是那么大,但是在win7下就显的捉襟见肘了
再格式化,重装系统就全没了,囧,就也是必须移动出来的第二个理由
以前只是自己挪挪地儿,小改一下注册表,今天无意中参考了几篇文章,那搞的才是个全面啊,在膜拜只后就全给做笔记了,忽忽,先上牛人原文的传送门
移动Program Files目录到非系统盘
第一步,复制 Program Files 目录
不能直接用资源管理器复制,我们需要保留此目录的所有权限设置,(以前我就是直接在资源管理器面弄到,现在严重怀疑,我的机器时不时的抽风是不是和这个有关)假设要从 C 盘移动到 D 盘:
第二步,修改注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion]
"ProgramFilesDir"="D:\\Program Files"
"CommonFilesDir"="D:\\Program Files\\Common Files"
第三步,重启
注意不是注销,因为 Program Files 里有很多文件是被系统服务使用的,注销并不能重启服务。
第四步,关闭 iphlpsvc 服务
因为它使用到了 “C:\Program Files\Internet Explorer\sqmapi.dll”:
第五步,删除 “C:\Program Files” 目录
要先取得所有权,添加改写权限后才可以删除。
第六步,创建 Junction 文件夹映射
把 “C:\Program Files” 指向 “D:\Program Files”,这是为了防止一些硬编码的 SB 程序不由分说地往 “C:\Program Files” 里写东西。
至此,Program Files目录的转移就结束了,与还不太放心的话,可以去注册表找找“C:\Program Files”这个字串符,手动改改了,呵呵,改坏了就是你人品问题了。
移动ProgramData 目录到非系统盘
第一步,复制 ProgramData 目录
假设要从 C 盘移动到 D 盘:
第二步,修改注册表
:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList] 下的 ProgramData 数据原为 %SystemDrive%\ProgramData,改为 D:\ProgramData。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders] 下的 “Common Administrative Tools”、”Common AppData”、”Common Programs”、”Common Startup”、”OEM Links”、”Common Templates” 等值的数据也相应地改改。如下:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders]
"Common Start Menu"="D:\\ProgramData\\Microsoft\\Windows\\Start Menu"
"Common Programs"="D:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs"
"Common Administrative Tools"="D:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Administrative Tools"
"Common Startup"="D:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup"
"OEM Links"="D:\\ProgramData\\OEM Links"
"Common Templates"="D:\\ProgramData\\Microsoft\\Windows\\Templates"
"Common AppData"="D:\\ProgramData"
第三步,重启
注销的话需要多加 net stop iphlpsvc 和 net stop BITS。
第四步,删除 C:\ProgramData 目录
其中有两个无法直接删除的文件要先取得所有权,添加改写权限后才可以删除。
第五步,创建 Junction 文件夹映射
把 C:\ProgramData 指向 D:\ProgramData,这是为了防止一些硬编码的程序不由分说地往 “C:\ProgramData” 里写东西。
移动Users 目录到非系统盘
第一步,修改注册表
和前面不同,因为 Users 目录下有一些系统占用的文件,复制不了。如果你和我一样有双系统或者用 U 盘启动 WinPE,那可以试试,不必按照这里写出的步骤做。但如果你没有相应的设备的话,那就继续SBS吧,先修改注册表,再复制文件。假设要移动到 E 盘:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList] 下的 Default、ProfilesDirectory、Public 三个值的数据改一下,把盘符都改为 E:。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-3843801140-3458922274-3296897442-500] 下的 ProfileImagePath 数据改为 E:\Users\Administrator。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders] 下的 “Common Desktop”、”Common Documents”、CommonMusic、CommonPictures、CommonVideo 五个值的数据把盘符都改为 E:。
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders] 下的值看到数据中有 C:\Users 的都改为 E:\Users。
第二步,注销,重新登录
会发现一些用户配置没正确加载的问题,但不用理会。
第三步,复制文件
第四步,注销,重新登录
在第二步看到的问题,解决了。
第五步,删除 “E:\Users\Default User” 目录
因为这个目录被 xcopy 复制错误,重新创建:
然后对照 “C:\Users\Default User” 的权限设置,把 “E:\Users\Default User” 设置成和它一样:
第六步,删除 C:\Users 目录
直接用资源管理器删除,很顺利。
第七步,创建映射
高级移动
好吧,我承认前面的你都移动了,其实系统还是会添加几个G文件区C盘,我们前面只是移动了应用软件的默认安装位置,和一些个人数据
这里要说的是,对于像 %SystemRoot%\Installer、%SystemRoot%\SoftwareDistribution 这类“顽固”的文件夹,不能通过修改注册表来定义路径的设置!
我们要先准备一个工具Junction传送门
这两个文件夹比较“常用”,MSI 安装程序会把安装文件缓存到 %SystemRoot%\Installer,比如您装了 VS,会发现这个文件夹大了很多;而 %SystemRoot%\SoftwareDistribution 是自动更新服务用来缓存更新程序的。我的这两个文件夹加起来就有2GB多,惆怅
假设要把 %SystemRoot%\Installer 修改为 E:\SysDir\Installer,
首先通过资源管理器把 C:\WINDOWS\Installer 文件夹剪切到 E:\SysDir\ 下(这个文件夹是隐藏的)
然后在命令提示符下输入:
对于 SoftwareDistribution 要多一步,要先停止自动更新服务:
后面步骤和 Installer 的一样,剪切 -> Junction:
这样做完之后 C:\WINDOWS\ 下的 Installer 和 SoftwareDistribution 其实只是文件夹的映射,对他们的写入操作全部都会映射到 D:\SysDir\ 下的对应文件夹。本质上就是把E盘的空间拿到 C 盘使用,减少对 C 盘的写入。
后记:参阅了MS上的文章,微软并不推荐把Program Files 目录移动到C盘以外的地方,那么也可以参考这个方法,这个东西个人觉得类似于linux的挂接硬盘,呵呵。具体的操作我就不写了,很简单的
就是这样简单的,整个挪移任务就完成!最后还是要说一下,搬家有风险,遗失物品不负责~~~~


不过这位牛人真够牛的,这样也行
有环境的孩子,我的硬盘还是40G的呢!
哇这个玩系统也太猛了,为什么非要放在c盘呢
找个工具吧,这样折腾很累啊,这让我想起以前读书时的折腾劲——一台机装7、8个系统,全部要启动正常,而且都是微软的系统
:dos6.22、win31、win32、win95、win97、win98RC(忘了,反正不是正式版)、winNT……
系统工程,看得我眼都花了,好麻烦啊!不过支持DIY精神!
@Derek:
麻烦一下,是为了以后重装的方便
@kramon:
看来我还是有显摆的空间的,嘿嘿
@小T:
默认的就是在C盘
@zwwooooo:
没有工具,哎~有空了用VB自己写一个吧,确实每次都要改挺烦的
@麦田:
人无远虑必有近忧~重装那会就不用特别去关注又没资料忘记备份了
@砼砼:
那就暂且让你显摆显摆,不过,我的移动硬盘多,4个,最小的一个是120的..哈哈..这方面就不给你反击的机会了!承让了!
@kramon:
其实这条评论我没有看见
- -这样折腾。。到底实用性能有多少。。
过来看看,最近也正想着干这事呢.
@ligyxy]:如果你觉得没有实用性 可以不这样折腾阿,
第四步,删除 C:\ProgramData 目录
其中有两个无法直接删除的文件要先取得所有权,添加改写权限后才可以删除。
能不能具体点 ,我按照你说的改了下win7,但是不知道该怎么删除掉programdata这个文件夹,我现在可以对其重新命名。权限修改能具体点吗?
@crossyou:可以重命名说明programdata这个文件夹的权限已经有了,不能删除的话,你看看具体的是programdata里面的那个文件(夹)不能删除
移动ProgramData、Program Files、Users这三个文件后,在C盘会产生这三个文件的快捷方式,能删除吗?如果删除了,IE8就打不开。移动完后,注册表要还原成C盘吗?
@longwelcome 不建议删除,把 “C:\Program Files” 指向 “D:\Program Files”,这是为了防止一些硬编码的 傻逼 程序不由分说地往 “C:\Program Files” 里写东西。
@longwelcome:IE8打不开,是因为系统已经指定了安装位置了,所以要用mklink的方式,进行指向,
本来就是为了移出C盘,干嘛还要改回去呢?用
命令指向一下就可以了
1、使用mklink /J命令后,会在C盘产生三个文件的快捷方式,且Program Files文件还是原来的体积,安装文件时,同时也会在C:\Program Files文件中安装一个,体积也会增加;
2、我见到有人XP系统下把“Documents and Settings”文件移动D盘,C盘已没有“Documents and Settings”文件,为什么不建议删除Win7下的这三个文件的快捷方式呢?
3、你还有其它联系方式吗?或许我还有其它的问题请教你。
@longwelcome:S1:mklink只是产生一个链接指向,并不占用实际的C盘空间,
S2:其是XP下也是同样的用建议使用mklink做一个“Documents and Settings”文件夹的指向,有些程序在保存配置文件的时候不会调用系统环境变量(特别是已安装好的,比如IE),而是写死了文件路径,为了保证程序的正常运行,所以都用了mklink
S3,我的邮箱地址啊,不过同样的你在这里写了评论,我的手机也能收到,但是工作比价繁忙,有的时候可能无法及时的回答
在注册表修改过程中,使用一个“/”符号,和使用两个“/”符号有什么区别;如:”ProgramFilesDir”=”D:\\Program Files”
@longwelcome:从我的实践来说没区别,我想这个可能是对于win98这样的老系统中的转义字符。。。具体的我也就不求甚解了,呵呵
我把这三个文件移出系统盘,使用mklink指向后,安装的其它文件,我看还是占系统盘的空间,而且每次安装文件,C盘都在不断的增大,这是什么原因呢?网上搜索的相关文章,都说使用mklink后,都不会占用系统空间,真的有点搞不明白了。请帮助一下,谢谢。
只是,显示的用了,其实是没有用的,
第四步,删除 C:\ProgramData 目录
其中有两个无法直接删除的文件要先取得所有权,添加改写权限后才可以删除。
还是搞不明白这句话应该怎么完成,取得所有权明白修改reg,但是添加改写权限就不知道该怎么搞了
望老板明示
@edge:@edge:
ProgramData 目录有两个目录的所有权貌似是system的。
具体取得所有权,请参见取得文件或文件夹的所有权
或者,导入这个注册表,添加鼠标右键的功能菜单
[HKEY_CLASSES_ROOT*shellrunas]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT*shellrunascommand]
@="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F"
[HKEY_CLASSES_ROOTexefileshellrunas2]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOTexefileshellrunas2command]
@="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F"
[HKEY_CLASSES_ROOTDirectoryshellrunas]
@="管理员取得所有权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOTDirectoryshellrunascommand]
@="cmd.exe /c takeown /f "%1" /r /d y & icacls "%1" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" /r /d y & icacls "%1" /grant administrators:F /t"
@砼砼:
灰常感谢。。。我走了个本办法,把挪不了的文件夹权限改成everyone,然后再WinPE里面操作,现在C盘那个干净啊,舒坦啊。。。
@砼砼:
最后补一句,党和国家需要你这样的好青年呀!!
太过奖了,哈哈