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

评论

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

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

@IvoFlipse,通常这是一个很好的假设,但在这种情况下,这是错误的。 “第3方工具”是一个150行的批处理文件,它提供了一个很好的CLI,用于修改注册表和清理输入,以符合Subst挑剔的斜杠规则,但这只是一个漂亮的包装。您可以在不使用程序的情况下进行操作,并且psubst的自述文件说明了如何操作。或者,请在下面的davr的答案中引用psubst README。

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

#1 楼

维基百科很好地提到:


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中,您可以按以下方式运行注册表编辑器:



开始»运行...(或按Win + R键)
类型:regedit

在Windows Vista及更高版本中,将弹出UAC,单击“是”。 />

评论


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

–乔伊
09年8月25日在8:46

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

– Brian Reiter
09年9月23日在18:58

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

–戴夫·贾维斯(Dave Jarvis)
2012年7月29日在19:06

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

–酥脆
2012年8月21日在20:58

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

–太阳神
16年7月20日在23:35

#2 楼

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 /如何使用驱动器字母将安装点指向同一个磁盘drive.aspx

评论


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

– daiscog
2012年5月15日15:37

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

– CAD bloke
13年2月18日在8:19

+1用于显示一种非常优雅的方式来自动完成此操作,而无需在启动文件夹中进行批量处理

– dkellner
15年8月3日,13:34

也可以从命令行(自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
16-10-12在10:50



这是一个更好的解决方案。这是用于生成该注册表项的PowerShell命令:Set-ItemProperty -Path“ HKCU:\ Software \ Microsoft \ Windows \ CurrentVersion \ Run”-名称“ G Drive”-值“ subst G:D:\\ mount \\ log”

– Poulad
19年11月4日15:47



#3 楼

您链接到的页面中有一个答案。您不需要第三方工具,只需使用该页面上详细介绍的简单注册表项即可。

创建一个名为“ mapdrive.reg”的文本文件,其内容如下:

REGEDIT4 

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


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

评论


reg键与批处理文件相比的优势在于,它可以在运行任何其他启动命令之前设置辅助驱动器,以防其中一些需要辅助驱动器起作用的情况

–davr
09年8月24日23:37

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

– Isxek
09年8月24日在23:55

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

–德罗伊
16年7月28日在12:19

#4 楼

我发现这个问题是因为我一直在寻找对我的启动替代脚本的改进-它们可以正常工作,但是有时在启动时文件夹崩溃(因为我的驱动器尚未映射)后执行。

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

net use u: "\computerName\c$\pathName" /persistent:yes


在讨论映射本地时,我根据Hank Arnold的建议改编了此内容。驱动器。我曾经猜想\\ myComputerName \ c可以工作,但是我不知道应用$。

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

\computerName\c$
以确保您正确设置了“ computerName”。

评论


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

–ashes999
2011年10月11日15:41

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

–马特·威尔基
13年5月28日下午6:55

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

–user165568
2015年1月2日,9:35

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

– HerbM
17年1月8日在13:47

#5 楼

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

#6 楼

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

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

https://github.com/cyberponk/psubst

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

>注意:
此作品无意贬低原始作者的著作,仅是出于实际需要而存在,如下:


作为一名新手管理员,我拥有不变的需要替换网络驱动器并与不同的网络用户打交道。
由于不是每个人都是Windows专家,所以我认为根据我在网上阅读的评论,自动进行错误管理可以提升管理员的权限。
随着一些人为参数顺序而苦苦挣扎,我认为最好是脚本以任何顺序处理参数。

我想不起所有添加的功能y,但是所有包含都是纯粹根据需要完成的。我正在共享代码,以便其他人不会遇到我遇到的麻烦。通过这种方式,除了共享和帮助之外,没有其他意图。

评论


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

–jsxt
16-2-29在6:33

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

–cyberponk
16-3-1在16:56



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

–jsxt
16年1月1日在22:20

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

– SilverbackNet
17年6月14日在19:01

#7 楼

我扩大了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 \下的相应值Windows会自动生成KnownFolder \ {GUID}。在Wow6432Node键下,没有任何显示给我,但是没有它们,回收站起作用了。这是在Windows 7系统上,因此我不确定它在新版本上的行为是否有所不同。

– Herohtar
19-09-10在21:04



仅添加一点数据,我有一个64位的Win 10系统,我测试了从32位应用程序(FastStone Image Viewer)删除时发生的情况,发现回收站不适用于32位应用程序。位应用,没有Wow6432Node键。

–托尼·普洛卡斯(Tony Pulokas)
19年9月11日19:40在

#8 楼

这是两个使用reg.exe将所需条目添加到Run配置单元的HKEY_CURRENT_USER注册表子项的示例。这些示例可以根据需要进行修改。以当前用户身份打开一个未提升的cmd窗口,然后粘贴修改后的行。

最简单的用例:

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "Map I" /t REG_SZ /d "subst I: \"C:\path\to\folder\"" /f


SUBST的path参数中嵌入了一个环境变量:

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "Map J" /t REG_EXPAND_SZ /d "subst J: \"^%DROPBOX_HOME^%\Notes\"" /f


请注意,第二个示例中有两个转义字符。围绕path参数的内部双引号使用反斜线,而环境变量的百分比符号则用尖号表示。并非总是需要双引号,但是为避免文件夹名称包含空格的问题,建议使用双引号。

#9 楼

我知道这个问题是在10多年前提出的,我可以看到大约是在半年前给出的最后一个答案...不过,我仍然觉得有必要用我的答案来更新此线程,因为这里提到了psubst工具(因为版本(@cyberponk)。它已更新至版本3.0.1,并进行了增强,可以以简单的方式持久保留具有提升特权的驱动器。

https://github.com/ildar-shaimordanov/psubst

以上链接指向原始工具的存储库。