教程吧
分享有用的知识

subst(映射文件夹为磁盘)命令的一些坑

1、背景

使用subst命令,你可以很容易的将一个文件夹映射为一个磁盘。这是cmd下自带的帮助信息:

  1. C:\Users\Administrator>subst /?
  2. 将路径与驱动器号关联。
  3.  
  4. SUBST [drive1: [drive2:]path]
  5. SUBST drive1: /D
  6.  
  7. drive1: 指定要分配路径的虚拟驱动器。
  8. [drive2:]path 指定物理驱动器和要分配给虚拟驱动器的路径。
  9. /D 删除被替换的
  10. (虚拟)驱动器。
  11.  
  12. 不带参数键入 SUBST,以显示当前虚拟驱动器的列表。

比如,直接运行:

  1. subst X: D:\dirname

你可以创建一个磁盘,盘符为X,内容与D:\dirname等效,除了不能运行一些磁盘检测类的程序/指令,其他的文件读取写入都是一样的。

subst缺点就是每次重启电脑需要重新映射,不过可以写成批处理,放到启动菜单里。

 

微软官方关于subst的解释见截图(截图有效防止404)【点击可以放大】

subst(映射文件夹为磁盘)命令的一些坑  菜鸟编程  第1张

 

2、问题

并没有找到官方解释。第三方解释subst指令是基于“当前”用户上下文的。说人话就是A用户创建的盘符,B用户是看不见的,这里无论AB用户的权限如何,哪怕B比A的权限高也不行。

另外假设有这种情况:

你的电脑有两个用户,administrator处于被禁用的状态。另一个账号叫zhangsan,也是管理员权限。

此时你从cmd.exe上右键“以管理员身份运行”时,这个cmd的用户上下文居然是administrator,而不是zhangsan。

这导致了你以管理员身份运行cmd之后,执行subst指令映射了磁盘,无法直接在资源管理器中看到。但是使用“以管理员身份运行”的subst指令可以看到。

subst(映射文件夹为磁盘)命令的一些坑  菜鸟编程  第2张

 

最痛苦的是:

当你以当前用户身份zhangsan执行cmd,映射为磁盘后。 你编写的其他程序,如果是管理员身份运行的,也读写不到zhangsan创建映射盘符。

 

3、解决方案

目前找到的所有解决方案都不如直接使用subst效果好。或者有潜在的其他问题的可能。

建议方案有两个:

  • 摆烂,看不见就看不见,程序能跑就行。
  • 以当前用户身份运行cmd程序,并执行subst指令。如果有编写其他程序,如果可能,降低其权限要求,能不用管理员就别用管理员了。

4、补充,网上一些其他解决方案:

1、分别以两种身份运行subst指令。这算是一种稍微好一点的方案,但是麻烦。

2、第二种使用修改系统注册表的办法

  1. Windows Registry Editor Version 5.00
  2.  
  3. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
  4. “X:”=“\\??\\D:\\dirname1”
  5. “Y:”=“\\??\\D:\\dirname2”

已知有两个问题:

  • 无法重命名磁盘。
  • 不能使用回收站,删除就直接没了,无法撤销。

个人极其不推荐这种方法,不确定还会不会有其他什么问题。

赞(0)
文章名称:《subst(映射文件夹为磁盘)命令的一些坑》
文章链接:https://jcba123.com/article/1058
本站大部分内容来源于互联网搬运,仅限于小范围内传播学习和文献参考,如有侵权请联系我们删除。

评论 抢沙发

登录

找回密码

注册