題 如何使SUBST映射在重新啟動後保持不變?


Windows(XP或更高版本)是否有內置的方法來創建持久的驅動器映射,就像SUBST創建的那樣?我找到了第三方工具 psubst。沒有第三方工具,有沒有辦法做到這一點?


157
2017-08-24 22:53


起源


可能不是這個程序不需要...... - Ivo Flipse♦
這是可能的,因為 psubst 只是一個與註冊表混淆的.bat文件。有關詳細信息,請參閱@ davr的答案。 - Scott Stafford
來自維基百科文章中接受的答案:“從Windows Vista開始,已刪除的文件會立即永久刪除,並且不會移動到“回收站”。在Windows Vista之前(例如,在Windows XP中),替換的“磁盤”中的文件在刪除時被移動到回收站。“ - JMD
@IvoFlipse,這是一個很好的假設,但在這種情況下,這是錯誤的。 “第三方工具”是一個150行批處理文件,它提供了一個很好的cli來修改註冊表和清理輸入以符合要求 subst但是,那些挑剔的拖尾規則 它只是一個漂亮的包裝。你可以在沒有程序和README的情況下完成 psubst 解釋如何。或者,看看 davr的回答如下 在那裡他引用了psubst自述文件。 - alexanderbird


答案:


維基百科提到

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. 開始運行... (或打 贏得+[R
  2. 類型: regedit
  3. 在Windows Vista及更高版本中,UAC會彈出,單擊 “是”

137
2017-08-24 23:04



很高興知道,即使我不使用 subst 了。但是在我做的時候,我曾經只是在我的Startup文件夾中放置一個批處理文件來完成這些工作。 - Joey
這太棒了。 (它需要重啟,僅供參考。)我們的源代碼樹必須從特定的驅動器號開始,以便我們的PDB始終在不同的計算機上對齊。這個註冊表設置解決了我多年來一直遇到的煩惱,如果您需要(很少)在管理員帳戶下運行Visual Studio,那麼不存在runas的子磁盤是一個很大的煩惱。 - Brian Reiter
Joey:該解決方案在Windows 7下似乎不起作用。運行具有管理權限的應用程序時,應用程序看不到替換的驅動器。 - Dave Jarvis
謝謝你的解決方案。僅供參考,如果您以交互方式將變量鍵入RegEdit,請不要加倍反斜杠。也就是說,創建一個名為“Z:”的新字符串變量(不帶引號),並將值設置為上面顯示的字符串,但單個反斜杠除外。 - Crispy
@魔鬼代言人, \?? 是NT對像管理器命名空間中的虛擬目錄。首先它檢查登錄會話DOS'設備'(實際上DOS設備是NT設備的符號鏈接,通常位於 \Device)然後是 \Global?? DOS設備。在WinObj中,您將找到登錄會話設備 \Sessions\0\DosDevices\[logon ID]。請注意,對於每個LSA登錄ID,會話0(服務)中都會跟踪登錄會話設備。它們與桌面會話無關。這就是為什麼如果您將驅動器映射為有限的管理員,它在升高時不存在;這是一個不同的登錄。 - eryksun


安裝在 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


72
2018-02-24 17:38



+1用於顯示如何在一個reg文件中執行多個映射。 :-) - megaflop
為了方便這個+1並解釋為什麼HKEY_CURRENT_USER。 :) - CAD bloke
+1用於顯示非常優雅的方式,在啟動文件夾中沒有批處理時自動執行此操作 - dkellner
也可以從命令行執行此操作(自XP / Windows 2000服務器): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db"  如果它是subst命令的最後一個字符,例如,NB \只需要在此處轉義。當目標是根目錄時: "subst F: D:\\";一個\將被解釋為逃避“跟隨它。 - stevek_mcc


你有沒看過你鏈接的頁面?您不需要第三方工具,您可以使用簡單的註冊表項來完成,如該頁面上所詳述。

使用以下內容創建名為“mapdrive.reg”的文本文件:

REGEDIT4 

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

然後應該只需雙擊它來設置,不需要第三方工具。


40
2017-08-24 23:08



reg鍵與批處理文件的優點是它在任何其他啟動命令運行之前設置了subst驅動器,以防其中一些需要subst驅動器運行 - davr
@Ivo:我稱之為對未知的健康恐懼;) - Isxek
如果在regedit中執行此操作,請確保使用單個反斜杠。例如\ ?? \ C:\一些\目錄 - Droj


我發現這是因為我正在尋找對我的啟動子腳本的改進 - 它們工作正常,但有時在啟動時文件夾崩潰後執行因為我的驅動器尚未映射。

首先,我編輯了註冊表,但無法使其工作。但是,我確實遇到了這個替代方案,雖然它沒有使用subst確實回答了我的問題,“如何使SUBST映射在重新啟動後持續存在?”不要使用subst ...(插入適當的'computerName'和'pathName'):

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

我從Hank Arnold的建議中改編了這個 關於映射本地驅動器的討論。我猜到\\ myComputerName \ c可能有效,但我不知道應用$。

在嘗試“net use”命令之前,嘗試導航到

\\計算機名\ C $
 確保你的'computerName'正確無誤。


20
2018-01-11 23:34



優秀的解決方案,雖然有兩個問題:1)它對本地文件系統不可見,2)權限...... - ashes999
如果你使用 \\localhost\c$\path\to\thing 它可以跨機器移植(或更改計算機名稱的升級)。在Win7 +上使用映射驅動器的一個缺點是,不同的安全策略適用於網絡驅動器而不是本地驅動器,並且某些程序將拒絕運行映射驅動器。 - matt wilkie
它對文件系統是可見的,並且對本地文件系統可見 - 它被標記為網絡驅動器,就像某些驅動器被標記為可移動驅動器一樣。這不會使這些驅動器不是本地文件系統的一部分或不可見 - 它使它們成為本地文件系統中的網絡/可移動驅動器。 - user165568
在測試中,我做了一個性能問題(現在幾年前)使用(本地)安裝的網絡驅動器也比直接使用文件系統(或替代等)慢。這對於小文件或偶爾使用來說並不是一個巨大的差異 - 不像是將實際網絡轉移到另一個“服務器” - 但這很重要。 - HerbM


將批處理文件放在Startup文件夾中,該文件夾將執行您要執行的所有SUBST。


8
2017-08-24 23:02





由於最初的PSubst有一些限制,似乎是由作者總結的,我不得不為我的需求編寫新版本,修復一些問題並增加功能和靈活性。

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

https://github.com/cyberponk/psubst

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

注意: 這項工作無意貶低原作者,只是因為真正的需要而存在,如下:

  • 作為一名newtork管理員,我一直需要SUBST的網絡驅動器和擺弄不同的網絡用戶。

  • 由於不是每個人都是Windows專家,我認為根據我通過網絡閱讀的內容,自動管理提升與錯誤處理會有所幫助。

  • 由於有些人在爭論順序上掙扎,我認為腳本最好以任何順序處理參數。

我不記得每一個增加的功能,但每個包含都是純粹由必要的。我正在分享代碼,以便其他人可能不會遇到我遇到的麻煩。除此之外,除了分享和幫助之外沒有其他意圖。


5
2018-06-11 00:29



請說“A”說“B”。你已經知道原來的psubst有很多問題 - 請指出它們。另一方面,psubst並沒有被拋棄。它剛剛達到了發展的極限。原始工具遵循非常簡單的理念:做點什麼,做得好。它沒有超載額外的功能,如使用UAC處理和創建額外的vbs代碼以執行更多操作。可以對原始代碼做一件事 - 一些外觀上的改變,以簡化代碼和提高可讀性。 - jsxt
編輯,請審查。 UAC和vbs用於自動管理提升。我不同意“開發限制”評論,因為我所做的所有更改都是在使用PSUBST遇到幾個問題後使用更簡單容易。我不打算批評原作者,所以我不會列出問題,而是創建解決方案。我實際上建議在原來的github分支中添加我的版本,但是被拒絕了,所以我不得不創建自己的分支。 - cyberponk
感謝您的快速和詳細的反饋。最有可能的是我需要仔細研究一下你的發展。 - jsxt
我的帽子給了你;我花了很多時間在批處理腳本中,我知道它是多麼痛苦。那段代碼看起來很不錯。 - SilverbackNet


實際上,PSUBST工具加入了兩種在Windows中創建替代驅動器的方法。如果您希望在啟動之間擁有持久驅動器,那麼您可以根據需要為每個驅動器運行此工具一次。另一種方法是使用“davr”建議的方法。 PSUBST工具只是相同,但允許以更簡單的方式使它。


2
2017-09-23 18:20





我喜歡 視覺基質

讓事情變得簡單


0
2017-12-14 11:09