分类: WINDOWS
2014-05-26 19:49:33
适用人群:SUBST爱好者
平台: Windows XP/Vista
相信大家对磁盘分区卷标(disk volume label)都不陌生,在Windows中每个磁盘分区都可设置一个卷标,在资源管理器(explorer)我的电脑中可以看得到,如果没有设置卷标,资源管理会显示一个默认值(比如Local Disk等)。
常用的修改卷标的方法有三种:
对于真实的物理分区,它的卷标是存在于磁盘分区结构中的,通过以上三种方法都可方便地修改卷标。但是对于SUBST命令得到的虚拟分区,它的“卷标”是什么?如何修改它的“卷标”?
直观地理解这个问题,SUBST只是简单地把一个路径省略成盘符(associates a path with a drive letter),那么它就没有卷标这个概念(一个路径怎么会有卷标)。然而实际情况要稍微复杂一点点儿。
我在XP和Vista系统上都做了一番实验,过程就不说了,直接给出结果。有两个方面:一是显示出来的卷标是什么;二是能否以及如何修改卷标。
为了方便起见,不妨设现在磁盘中有物理分区C:,该分区下有个目录叫Temp,路径为C:/Temp,用SUBST目录把C:的根目录或者Temp目录虚拟成Z:,即
a) SUBST Z: C:/
b) SUBST Z: C:/Temp/
一、虚拟分区的卷标
通过DIR命令看到的Z:的卷标都与C:相同(如果C:没有卷标则Z:也没有)。
在资源管理器中看到的卷标有如下三种可能:
注[1]: 相关注册表项为HKCU/Software/Microsoft/Windows/CurrentVersion/Explorer/DriveIcons/Z/DefaultLabel下的(Default),或HKLM中相应键值。
二、修改虚拟分区卷标
如果将C:/虚拟为Z:(即上面提到的命令a),那么无论使用哪种方式修改Z:的卷标,其实都是在修改C:;但需要注意的事,根据虚拟分区卷标的显示规则,当把Z:的卷标删除时,C:的卷标也随之被删除,C:将显示Local Disk等默认值,但Z:显示的有可能是注册表中的内容。
如果将C:/Temp/虚拟为Z:(即上面提到的命令b),那么使用Lable命令或者SetVolumeLabel函数都无法修改Z:的卷标(提示Access Denied);使用资源管理器重命名方式修改Z:的卷标,其实是修改了上面提到的注册表项的值,但根据虚拟分区卷标的显式规则,只有当C:没有卷标时,才会显示注册表中的内容。
——– 小巧的分隔符 ——–
综上,如果希望在资源管理器中能够使得各个虚拟分区显示各不相同的卷标,需要将相应的物理分区卷标删除,并保证注册表中有相关的注册表项(可以通过资源管理器修改,也可以通过脚本或程序直接修改注册表)。
——– 身轻如燕的分隔符 ——–
最后,感谢Drinker Lu提出了这个问题。