最近一位朋友在安装 Matlab 的时候,由于 OEM 分区方式不合理,系统分区空间不足,而数据分区空间又过于充足,于是请我帮助她合并分区。在合并分区后为了保持之前的路径仍然能够正常访问,我准备实践一下之前就听说过的将目录映射到盘符的操作。
在 Windows 中有一个叫做 subst.exe
的程序,它可以将目录映射到盘符。用法如下:
– subst.exe
列出当前所有的虚拟盘符
– subst.exe D: C:\data
将 C:\Data
映射到 D:
– subst.exe D: /D
删除虚拟盘符 D:
但 subst.exe
的映射仅在当前 session 有效,例如 UAC 提升的 shell 中无法访问在 UAC 提升之前建立的映射关系,同时让 subst.exe
开机启动的过程中,explorer.exe
建立图标缓存时也无法访问对应的图标导致图标空白。
经过查阅,在 psubst 的实现看到一个解决方法,抄录翻译如下:
建立一个 reg 文件,内容填充如下:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"D:"="\\??\\C:\\Data"
这里将 D:
换成需要的盘符,将 C:\\Data
换成对应的路径即可,注意在双引号中需要将 \
转义为 \\
。然后将这个 reg 文件导入注册表即可实现。
也可以在注册表中前往 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices
手动建立。手动建立时不需要转义 \
。同时如果需要删除映射关系,也需要前往这里删除。
勘误一下
代码块最后一行
“D:”=” ?? C: Data”
应该是
“D:”=”\\??\\C:\\Data\\”(看原文是这样的,但我并未实践这个方法,而是在注册表编辑器中操作的)
此外如果是在注册表编辑器中,目录HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices下
新建字符串值,名称为”D:”, 值为”\??\C:\Data\”(双引号里的内容,问号就是原封不动抄过去的)
完成后需要重启计算机才会生效
哈哈,时隔多年,居然更新了
对啦,blog 正文里边把注册表项目的反斜杠吃掉啦
赞!👍
把文件夹设置共享,然后映射成网络驱动器。这个更简单。
用共享文件夹的方法记忆量小,但是其实步骤反而更多的,要依次启用共享,设置权限,再映射驱动器,
并且可能把不想暴露在网络的文件夹暴露出去。
要简单(且接受敲一行命令)就还是下载 psubst 好了,
他会先用 subst 命令让虚拟盘符立即生效,
然后修改注册表让下次登陆依然生效
https://github.com/ildar-shaimordanov/psubst