项目目录嵌套到七八层以后,命令行里光 cd 就得敲半行。构建脚本、调试配置、各种工具的设置里也到处写着这串长路径,哪天挪一下目录就要满世界改。subst 能把一个路径挂成虚拟盘符,比如把那串长路径挂到 P:,脚本里只写 P:\ 开头,看上去很省事。打算长期这么用之前,想问问有没有人踩过坑。
官方文档写了什么
Microsoft Learn 上的 subst 页面内容不多,能确定的就这几条:
- 用法是
subst <盘符>: <路径>,比如页面上的例子subst z: b:\user\betty\forms,挂好以后输入z:就能直接进到那个目录。 subst <盘符>: /d删除这个虚拟盘符,不带参数运行subst,会列出当前生效的虚拟盘。- chkdsk、diskcomp、diskcopy、format、label、recover 这几个命令在 subst 出来的盘上不能用,文档原话是 must not be used。
- 盘符必须在 lastdrive 指定的范围内,否则会报
Invalid parameter - drive1:。
开发时关心的那几件事,文档一句都没提。
下面几点只能自己试
下面这些没有官方说法,也还没实际测过,列出来是想请有经验的人对一下,或者照着自己验证:
- 重启以后盘符还在不在,可以挂好后重启一次,再不带参数跑
subst,看列表里还有没有。如果没了,有人会把挂载命令放进登录时执行的脚本里,这个做法稳不稳也得自己观察一段时间。 - 管理员终端和普通终端看到的是不是同一套盘符,可以分别开一个,各跑一次
subst对比输出。 - IDE 记下的是哪条路径,得自己看:从 P:\ 打开项目,再看最近项目列表、断点、调试配置里存的是盘符路径还是原始长路径。同一个项目从两条路径各打开一次,会不会被当成两个项目、索引建两遍,也要试了才知道。
- Git 那边,可以在 P:\ 和原路径下各跑一次
git status,看输出一不一致。再留意钩子脚本和编辑器里的 Git 面板显示的路径,有没有一边是盘符、一边是长路径的情况。 - subst 盘跟映射网络驱动器有什么不同:文档只说 subst 是把路径关联到盘符,没跟网络映射盘做比较。两者在权限、断线、其他程序能不能看到这些方面有没有差别,得实际试过才知道。
自己测的话,最好每一项都在刚重启完的干净状态下做。顺手记下 Windows、IDE 和 Git 的版本,回帖时一起贴出来,别人才好对照。同一台机器上结论也可能随系统更新变化,过一阵复测一次不算多余。
还有一条是文档里明确写了的:别在 subst 出来的盘上跑 chkdsk 或 format 之类的磁盘命令,要查盘就对原始的物理盘操作。
想问的
如果团队里每个人都用同一个盘符,脚本和配置里的路径就能统一,这一点很吸引人。可一旦某台机器忘了挂,或者那个盘符已经被别的盘占了,构建多半就跑不起来。这个风险划不划得来,要看上面那几点实际表现怎样。
另一种思路是不挂盘符,把长路径收进环境变量或者工具各自的配置里,缺点是每个工具的写法不一样,维护起来更散。两条路各有代价,想听听实际用过的人怎么取舍。
长期用 subst 做开发目录的,重启、IDE 和 Git 这几块实际表现怎么样?