如何使SUBST映射在重新启动后持续存在?


177

Windows(XP或更高版本)是否具有内置方法来创建永久驱动器映射,例如SUBST创建的映射?我找到了第三方工具psubst。没有第三方工具,有没有办法做到这一点?


这是可能的,因为psubst只是一个与注册表无关的.bat文件。有关详细信息,请参见下面的@davr答案。
斯科特·斯塔福德

接受答案中来自Wikipedia文章的警告:“ 从Windows Vista开始,已删除的文件将立即被永久删除,并且不会移动到“回收站”。在Windows Vista(例如,在Windows XP中)之前,替换后的文件是“磁盘”在删除后移到了回收站。
JMD

1
@IvoFlipse,通常这是一个很好的假设,但在这种情况下,这是错误的。“第3方工具”是一个150行的批处理文件,为修改注册表和清理输入内容以使其符合subst挑剔的斜杠规则提供了很好的条件,但这只是一个漂亮的包装器。您可以在不使用程序的情况下进行操作,而README则psubst说明了操作方法。或者,请参见下面的davr的答案,其中引用了pREAD README。
alexanderbird

我添加了一个解决回收站问题的答案
Tony Pulokas,

Answers:


154

那么维基百科提到

C:\>SUBST /?
Associates a path with a drive letter.

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        Specifies a virtual drive to which you want to assign a path.
  [drive2:]path  Specifies a physical drive and path you want to assign to
                 a virtual drive.
  /D             Deletes a substituted (virtual) drive.

Type SUBST with no parameters to display a list of current virtual drives.

因此,您可以使用将路径与驱动器号关联subst。在持续SUBST命令(psubst)软件似乎是该死的方便,他们提供的解决方案从启动运行:

https://code.google.com/p/psubst/#Inconstancy

不稳定

但是,系统重新启动会破坏虚拟磁盘。该怎么办?启动后可以创建磁盘。但是,如果在启动的早期步骤中需要磁盘,该怎么办?例如,运行服务?有系统功能可以从系统注册表启动虚拟磁盘:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents"

创建具有扩展名的文本文件.REG并运行它就足够了。下次启动系统时,虚拟磁盘将在登录时存在。它需要定义磁盘和路径的名称。请注意,路径中的每个反斜杠都会加倍。

在Windows中,您可以运行注册表编辑器,如下所示:

  1. 开始»运行...(或按Win+ R
  2. 类型: regedit
  3. 在Windows Vista及更高版本中,将弹出UAC,单击“是”

6
很高兴知道,即使我不再使用subst了。但是在我以前的时候,我曾经只是在我的Startup文件夹中放置了一个批处理文件来完成这些工作。
乔伊,

2
这太棒了。(这需要重新启动,FYI。)我们的源树必须从特定的驱动器号开始,以便我们的PDB始终在不同的计算机上对齐。此注册表设置解决了我多年来已经遇到的烦恼,即替换磁盘不带有runas,这是一个很大的烦恼,如果您需要(很少)以admin帐户运行Visual Studio。
Brian Reiter 2009年

3
Joey:该解决方案在Windows 7下似乎不起作用。以管理员身份运行应用程序时,替换驱动器对应用程序不可见。
戴夫·贾维斯

31
感谢您的解决方案。仅供参考,如果您以交互方式在RegEdit中键入变量,请不要将反斜杠加倍。也就是说,创建一个名为“ Z:”(不带引号)的新字符串变量,并将该值设置为上面显示的字符串,但带有单反斜杠除外。
脆皮2012年

3
@ Devil'sAdvocate \??是NT对象管理器名称空间中的虚拟目录。首先,它检查登录会话DOS“设备”(实际上,DOS设备是指向NT设备的符号链接,通常位于中\Device),然后检查\Global??DOS设备。在WinObj中,您将在中找到登录会话设备\Sessions\0\DosDevices\[logon ID]。请注意,对于每个LSA登录ID,登录会话设备都在会话0(服务)中进行了跟踪。它们与桌面会话无关。这就是为什么如果将驱动器映射为受限管理员,则在提升时不存在该驱动器。这是一个不同的登录。
Eryk Sun

76

进行安装HKEY_CURRENT_USER的好处是每个用户都有不同的设置。我宁愿坚持用户空间设置,只要系统服务不依赖于设备。

REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"F Drive"="subst F: D:\\mount\\db"
"G Drive"="subst G: D:\\mount\\log"

来源:http : //networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx


7
+1用于显示如何在一个reg文件中进行多个映射。:-)
megaflop

4
为方便起见,+ 1,并解释了为什么使用HKEY_CURRENT_USER。:)
CAD bloke

1
+1表示在启动文件夹中无需批处理即可自动完成的非常优雅的方式
dkellner,2015年

3
也可以从命令行(自XP / Windows 2000服务器开始)执行此操作:reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \仅在它是subst命令的最后一个字符时才需要转义,例如,当目标是根目录时:"subst F: D:\\"; 单\有将被解释为转义“它后面。
stevek_mcc

44

您链接到的页面中有一个答案。您不需要第三方工具,只需使用一个简单的注册表项即可完成该操作,如该页所述。

使用以下内容创建一个名为“ mapdrive.reg”的文本文件:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents" 

然后,只需双击它即可进行设置,而无需第三方工具。


8
reg键与批处理文件相比的优势在于,它可以在运行任何其他启动命令之前设置从属驱动器,以防其中某些命令需要
从属

6
@Ivo:我称其为对未知的健康恐惧;)
Isxek

9
如果在regedit中执行此操作,请确保使用单个反斜杠。例如\ ?? \ C:\ Some \ Directory
Droj

27

我发现此问题是因为我正在寻找对我的启动替代脚本的改进-它们可以正常工作,但有时在文件夹因无法映射驱动器而在启动时崩溃后执行。

首先,我编辑了注册表,但无法使其正常工作。但是,我确实遇到了这种替代方法,尽管它不使用subst,但确实为我回答了一个问题:“如何使SUBST映射在重新启动后持久存在?” 不要使用替代...(插入适当的“ computerName”和“ pathName”):

净使用u:“ \\ computerName \ c $ \ pathName” / persistent:是

本次有关映射本地驱动器的讨论中,我根据Hank Arnold的建议进行了改编。我猜想\\ myComputerName \ c可能有用,但是我不知道应用$。

在尝试使用“ net use”命令之前,请尝试导航到

\\计算机名\ c $
确保您的“ computerName”正确无误。


2
出色的解决方案,尽管有两个问题:1)本地文件系统不可见,2)权限...
ashes999 2011年

6
如果您使用\\localhost\c$\path\to\thing它,则可以跨机器移植(或更改计算机名称的升级)。在Win7 +上使用映射驱动器的缺点是,与本地驱动器相比,对网络驱动器应用的安全策略不同,某些程序只会拒绝运行映射驱动器。
马特·威尔基

1
它对文件系统是可见的,而对本地文件系统是可见的-被标记为网络驱动器,就像某些驱动器被标记为可移动驱动器一样。但这并不能使此类驱动器不成为本地文件系统的一部分或对本地文件系统不可见-而是使它们成为本地文件系统中的网络/可移动驱动器。
user165568 2015年

1
在测试中,我针对性能问题(现在已经是几年了),使用(本地)安装的网络驱动器也比直接使用文件系统(或替代文件)慢。对于小文件或偶尔使用,这并没有太大的区别-不像通过实际的网络转到另一个“服务器”-而是很重要的。
HerbM

8

将一个批处理文件拖放到“启动”文件夹中,该文件将执行您要执行的所有SUBST。


5

由于原始的PSubst有一些局限性,并且似乎是由作者得出的结论,因此我不得不为自己的需要编写新版本的代码,以解决一些问题并增加功能和灵活性。

在此处查看PSubst版本3批处理文件

https://github.com/cyberponk/psubst

与Windows 7,Windows 8,Windows 10,Windows Server 2012兼容

注意: 该作品无意贬低原始作者的著作,仅是出于实际需要而出现,如下所示:

  • 作为新手管理员,我一直需要替换网络驱动器并摆弄其他网络用户。

  • 由于不是每个人都是Windows专家,所以我认为基于我在网上阅读的评论,具有错误处理功能的自动管理员提升会有所帮助。

  • 当有些人在争执参数顺序时,我认为最好是脚本以任意顺序处理参数。

我想不起所有添加的功能,但是每个包含项纯属必要。我正在共享代码,以便其他人不会遇到我的麻烦。这样,除了共享和帮助之外,没有其他意图。


请说“ A”再说“ B”。您已经说过原始psubst有很多问题-如果有问题,请指出它们。另一方面,不放弃psubst。它刚刚达到了其发展的极限。原始工具遵循非常简单的理念:做某事并做好。它不会因使用UAC处理和创建其他vbs代码等其他功能而过载。可以对原始代码做一件事-进行一些外观上的更改以简化代码并提高可读性。
jsxt

编辑后,请复查。UAC和vbs用于自动管理员提升。我不同意“开发的局限性”的评论,因为在遇到使用PSUBST的一些问题后,我所做的所有更改都使使用变得更加简单易行。我无意批评原始作者,因此我不会列出问题,而是创建解决方案。我实际上建议在原始github分支中添加我的版本,但遭到拒绝,因此我不得不创建自己的分支。
cyberponk '16

感谢您的快速详细的反馈。我很可能需要更仔细地了解您的开发。
jsxt

我的帽子给你了。我花了很多时间在批处理脚本开发方面,我知道这是多么痛苦。该代码看起来相当不错。
SilverbackNet

2

我正在扩展davr的答案,因为从映射驱动器删除的所有文件都会被永久删除,而不是进入回收站。此REG文件基于从TechNet文章编译信息,该文章讨论了如何启用回收站。该示例将虚拟Q驱动器映射到文件夹“ OneDrive-Test”,并在Q驱动器上启用回收站。更改路径和名称以适合您的情况。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"Q:"="\\??\\C:\\Users\\Tony\\OneDrive - Test"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

如果只有一个这样的映射驱动器,则可以使用GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}。如果您有多个映射驱动器,则每个驱动器都应与您喜欢的GUID生成器中的GUID匹配。


我的一些观察结果:如果仅在下设置值HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}并重新启动,则HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}Windows会自动生成下的相应值。Wow6432Node钥匙下什么都没有给我显示,但是没有它们,回收站就可以工作。这是在Windows 7系统上,因此我不确定它在新版本上的行为是否有所不同。
Herohtar

1
仅添加一点数据,我有一个64位的Win 10系统,我测试了从32位应用程序(FastStone Image Viewer)删除时发生的情况,发现回收站不适用于32位应用程序。位应用,没有Wow6432Node键。
托尼·普洛卡斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.