วิธีที่จะทำให้การแมป SUBST คงอยู่ตลอดการรีบูตเครื่อง?


177

Windows (XP หรือใหม่กว่า) มีวิธีในตัวในการสร้างการแมปไดรฟ์ที่คงอยู่เช่นเดียวกับที่ SUBST สร้างหรือไม่ ผมพบว่าเป็นเครื่องมือของบุคคลที่ 3 psubst มีวิธีทำโดยไม่มีเครื่องมือของบุคคลที่สามหรือไม่


เป็นไปได้เพราะpsubstเป็นเพียงไฟล์. bat ที่ mucks กับรีจิสทรี ดูคำตอบของ @ davr ด้านล่างสำหรับรายละเอียด
Scott Stafford

Caveat จากบทความ Wikipedia ในคำตอบที่ได้รับการยอมรับ: " เริ่มต้นด้วย Windows Vista ไฟล์ที่ถูกลบจะถูกลบอย่างถาวรทันทีและจะไม่ถูกย้ายไปที่" Recycle Bin "ก่อนหน้า Windows Vista (ใน Windows XP เป็นต้น) ไฟล์จากการแทนที่" ดิสก์ "ถูกย้ายไปยังถังรีไซเคิลเมื่อถูกลบ "
JMD

1
@IvoFlipse นั่นเป็นข้อสมมติฐานที่ดีโดยทั่วไป แต่ในกรณีนี้มันผิด ของเครื่องมือของบุคคลที่ 3 'เป็นไฟล์ชุด 150 บรรทัดที่ให้ CLI ที่ดีสำหรับการปรับเปลี่ยนรีจิสทรีและการทำความสะอาดการป้อนข้อมูลเพื่อให้สอดคล้องกับsubst's จู้จี้จุกจิกกฎต่อท้ายเฉือน แต่มันเป็นเพียงเสื้อคลุมสวย คุณสามารถทำได้โดยไม่ต้องใช้โปรแกรมและ README เพื่อpsubstอธิบายวิธีการ หรือดูคำตอบของ davr ด้านล่างที่ซึ่งเขาอ้างอิง psubst README
alexanderbird

ฉันได้เพิ่มคำตอบที่แก้ไขปัญหาถังรีไซเคิล
โทนี่ปูโลคัส

คำตอบ:


154

เป็นอย่างดีWikipedia กล่าวถึง :

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 Persistent (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 ซึ่งทำสิ่งเหล่านั้น
Joey

2
นี่มันเจ๋งมาก. (ต้องมีการรีบูต FYI) แผนผังแหล่งที่มาของเราจะต้องเริ่มต้นจากตัวอักษรชื่อไดรฟ์ที่ระบุเพื่อให้ PDB ของเราทั้งหมดจัดตำแหน่งบนคอมพิวเตอร์เครื่องอื่นเสมอ การตั้งค่ารีจิสทรีนี้แก้ไขความรำคาญที่ฉันมีมานานหลายปีด้วยดิสก์ย่อยที่ไม่ได้อยู่ที่นั่นพร้อมกับ runas ซึ่งเป็นปัญหาใหญ่ถ้าคุณจำเป็นต้องเรียกใช้ Visual Studio ภายใต้บัญชีผู้ดูแลระบบ
ไบรอันไรเตอร์

3
Joey: ดูเหมือนว่าวิธีแก้ปัญหานั้นจะไม่ทำงานใน Windows 7 เมื่อใช้งานแอปพลิเคชันที่มีสิทธิ์ระดับผู้ดูแลระบบจะไม่สามารถมองเห็นไดรฟ์ที่ถูกแทนที่
Dave Jarvis

31
ขอบคุณสำหรับการแก้ปัญหา FYI ถ้าคุณพิมพ์ตัวแปรลงใน RegEdit แบบโต้ตอบอย่าแบ็กสแลชเป็นสองเท่า นั่นคือสร้างตัวแปรสตริงใหม่ชื่อ "Z:" (โดยไม่ใส่เครื่องหมายอัญประกาศ) และตั้งค่าเป็นสตริงที่แสดงด้านบนยกเว้นด้วยแบ็กสแลชเดี่ยว
กรอบ

3
@ Devil'sAdvocate \??เป็นไดเรกทอรีเสมือนในเนมสเปซตัวจัดการวัตถุ NT ก่อนอื่นตรวจสอบเซสชันของอุปกรณ์เข้าสู่ระบบ 'อุปกรณ์' DOS (จริงๆอุปกรณ์ DOS เป็นลิงก์สัญลักษณ์ไปยังอุปกรณ์ NT ซึ่งมักจะอยู่ใน\Device) และ\Global??อุปกรณ์ DOS ใน WinObj \Sessions\0\DosDevices\[logon ID]คุณจะพบอุปกรณ์เซสชั่นการเข้าสู่ระบบใน ขอให้สังเกตว่าอุปกรณ์เซสชั่นการเข้าสู่ระบบทั้งหมดถูกติดตามในเซสชั่น 0 (บริการ) สำหรับแต่ละ ID การเข้าสู่ระบบ LSA พวกเขาไม่ได้มีความสัมพันธ์กับเซสชันเดสก์ทอป นั่นเป็นเหตุผลที่ถ้าคุณแมปไดรฟ์ในฐานะผู้ดูแลระบบที่ จำกัด จะไม่มีอยู่เมื่อยกระดับ มันเป็นการเข้าสู่ระบบที่แตกต่างกัน
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

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 สำคัญเมื่อเทียบกับแฟ้มชุดคือว่ามันตั้งไดรฟ์ subst ก่อนที่จะเริ่มต้นอื่น ๆ เรียกใช้คำสั่งในกรณีที่บางส่วนของผู้ต้อง subst ขับรถฟังก์ชั่น
davr

6
@Ivo: ฉันเรียกมันว่าความกลัวที่มีสุขภาพดีที่ไม่รู้จัก;)
Isxek

9
หากทำสิ่งนี้ใน regedit ตรวจสอบให้แน่ใจว่าใช้แบ็กสแลชเดี่ยว เช่น \ ?? \ C: \ Some \ Directory
Droj

27

ฉันพบสิ่งนี้เพราะฉันกำลังมองหาการปรับปรุงสคริปย่อยเริ่มต้นของฉัน - พวกเขาทำงานได้ดี แต่บางครั้งก็ดำเนินการหลังจากโฟลเดอร์ล้มเหลวในการเริ่มต้นเพราะไดรฟ์ของฉันยังไม่ได้แมป

ก่อนอื่นฉันแก้ไขรีจิสทรี แต่ไม่สามารถทำงานได้ อย่างไรก็ตามฉันเจอทางเลือกนี้ซึ่งถึงแม้ว่ามันจะไม่ใช้ subst ก็จะตอบคำถามของฉันว่า "จะทำให้ SUBST ทำแผนที่ได้อย่างไรในการรีบูต?" อย่าใช้ส่วนย่อย ... (ใส่ 'computerName' และ 'pathName' ที่เหมาะสม):

net use u: "\\ computerName \ c $ \ pathName" / persistent: ใช่

ฉันดัดแปลงสิ่งนี้จากคำแนะนำของ Hank Arnold ในการอภิปรายการทำแผนที่ไดรฟ์ในเครื่องนี้ ฉันเดาว่า \\ myComputerName \ c อาจใช้งานได้ แต่ฉันไม่รู้ว่าจะใช้ $

ก่อนที่คุณจะลองใช้คำสั่ง "net use" ให้ลองไปที่

\\ computername \ $ ค
เพื่อให้แน่ใจว่าคุณมี 'ชื่อคอมพิวเตอร์' ถูกต้อง


2
วิธีแก้ปัญหาที่ดีเลิศแม้ว่าจะมีสองปัญหา: 1) มันไม่สามารถมองเห็นระบบไฟล์ท้องถิ่น 2) สิทธิ์ ...
ashes999

6
ถ้าคุณใช้\\localhost\c$\path\to\thingมันเป็นอุปกรณ์พกพาข้ามเครื่อง (หรืออัพเกรดที่เปลี่ยนชื่อคอมพิวเตอร์) ข้อเสียเปรียบของการใช้ไดรฟ์ที่แมปบน Win7 + คือนโยบายความปลอดภัยที่แตกต่างกันนำไปใช้กับไดรฟ์เครือข่ายมากกว่าในระบบและบางโปรแกรมก็จะปฏิเสธที่จะเรียกใช้ไดรฟ์ที่แมป
matt wilkie

1
มันสามารถมองเห็นได้ในระบบไฟล์และมันสามารถมองเห็นได้กับระบบไฟล์ในท้องถิ่น - มันถูกทำเครื่องหมายเป็นไดรฟ์เครือข่ายเช่นเดียวกับไดรฟ์บางอย่างที่ถูกทำเครื่องหมายว่าเป็นไดรฟ์ที่ถอดออกได้ ที่ไม่ได้ทำให้ไดรฟ์ดังกล่าวไม่ได้เป็นส่วนหนึ่งของระบบไฟล์โลคอลหรือไม่สามารถมองเห็นได้มันทำให้พวกเขาเป็นไดรฟ์เครือข่าย / ถอดออกได้ในระบบไฟล์โลคัล
165568

1
ในการทดสอบฉันทำเพื่อประสิทธิภาพ (สองสามปีก่อนตอนนี้) โดยใช้ไดรฟ์เครือข่ายที่ติดตั้งในเครื่องก็ช้ากว่าการใช้ระบบไฟล์ (หรือ subst เป็นต้น) โดยตรง นี่ไม่ใช่ความแตกต่างอย่างมากสำหรับไฟล์ขนาดเล็กหรือการใช้งานเป็นครั้งคราว - ไม่เหมือนกับการข้ามผ่านเครือข่ายจริงไปยัง 'เซิร์ฟเวอร์' อื่น - แต่มีความสำคัญ
HerbM

8

วางแบตช์ไฟล์ในโฟลเดอร์ Startup ของคุณที่ทำ SUBST ทั้งหมดที่คุณต้องการ


5

เนื่องจาก PSubst ดั้งเดิมมีข้อ จำกัด บางประการและดูเหมือนว่าจะได้ข้อสรุปจากผู้เขียนฉันจึงต้องเขียนโค้ดเวอร์ชันใหม่สำหรับความต้องการของฉันแก้ไขปัญหาบางอย่างและเพิ่มฟังก์ชันการทำงานและความยืดหยุ่น

ตรวจสอบที่นี่สำหรับไฟล์แบตช์ PSubst เวอร์ชั่น 3

https://github.com/cyberponk/psubst

เข้ากันได้กับ Windows 7, Windows 8, Windows 10, Windows Server 2012

หมายเหตุ: งานนี้ไม่มีความตั้งใจที่จะทำให้เสื่อมเสียชื่อเสียงผู้เขียนต้นฉบับและมามีอยู่เพียงเพราะความจำเป็นจริงดังต่อไปนี้:

  • ในฐานะผู้ดูแลระบบ newtork ฉันมีความต้องการคงที่สำหรับการเชื่อมต่อเครือข่ายไดรฟ์และเล่นซอกับผู้ใช้เครือข่ายที่แตกต่างกัน

  • ไม่ใช่ทุกคนที่เป็นผู้เชี่ยวชาญ Windows ฉันคิดว่าการยกระดับผู้ดูแลระบบอัตโนมัติด้วยการจัดการข้อผิดพลาดจะช่วยได้ขึ้นอยู่กับ coments ที่ฉันอ่านผ่านเว็บ

  • ขณะที่บางคนต่อสู้กับคำสั่งโต้แย้งฉันคิดว่ามันจะเป็นการดีที่สุดสำหรับสคริปต์ที่จะทำงานกับข้อโต้แย้งในลำดับใด ๆ

ฉันจำการทำงานทุกอย่างที่เพิ่มเข้ามาไม่ได้ แต่การรวมทุกอย่างทำได้โดยความจำเป็น ฉันกำลังแบ่งปันรหัสเพื่อให้ผู้อื่นไม่พบปัญหาที่ฉันมี โดยสิ่งนี้ไม่มีความตั้งใจอื่นนอกจากการแบ่งปันและช่วยเหลือ


กรุณาพูดว่า "A" พูดว่า "B" คุณเห็นว่า psubst ดั้งเดิมมีปัญหามากมาย - โปรดชี้ไปที่พวกเขาถ้าเป็น ในทางกลับกัน psubst จะไม่ถูกทอดทิ้ง เป็นเพียงการบรรลุขีด จำกัด ของการพัฒนา เครื่องมือดั้งเดิมตามหลักปรัชญาเรียบง่าย: ทำอะไรสักอย่างและทำได้ดี มันไม่ได้โหลดมากเกินไปด้วยฟังก์ชั่นพิเศษเช่นการจัดการกับ UAC และการสร้างรหัส vbs เพิ่มเติมสำหรับการทำอะไรเพิ่มเติม สิ่งหนึ่งที่สามารถทำได้ผ่านรหัสต้นฉบับ - การเปลี่ยนแปลงเครื่องสำอางเพื่อลดความซับซ้อนของรหัสและปรับปรุงการอ่าน
jsxt

แก้ไขแล้วโปรดตรวจสอบ UAC และ vbs ใช้สำหรับการยกระดับผู้ดูแลระบบอัตโนมัติ ฉันไม่เห็นด้วยกับความคิดเห็น "ขีด จำกัด ของการพัฒนา" เนื่องจากการเปลี่ยนแปลงทั้งหมดที่ฉันทำคือทำให้การใช้ง่ายขึ้นและง่ายขึ้นหลังจากที่ฉันพบปัญหาหลายอย่างโดยใช้ PSUBST ฉันไม่ได้ตั้งใจวิพากษ์วิจารณ์ผู้เขียนต้นฉบับดังนั้นฉันจะไม่แสดงรายการปัญหา แต่ฉันสร้างวิธีแก้ปัญหาแทน ฉันเสนอให้เพิ่มรุ่นของฉันในสาขา GitHub เดิม แต่ถูกปฏิเสธดังนั้นฉันจึงต้องสร้างสาขาของตัวเอง
cyberponk

ขอบคุณสำหรับข้อเสนอแนะที่รวดเร็วและมีรายละเอียด ส่วนใหญ่ฉันอาจต้องการดูการพัฒนาของคุณอย่างใกล้ชิด
jsxt

หมวกของฉันออกไปให้คุณ; ฉันใช้เวลาไปกับร่องลึกการเขียนสคริปต์ชุดและฉันรู้ว่ามันเจ็บปวดแค่ไหน รหัสนั้นดูค่อนข้างดี
SilverbackNet

2

ฉันกำลังขยายคำตอบของ davrเพราะไฟล์ใด ๆ ที่ถูกลบออกจากไดรฟ์ที่แมปจะถูกลบอย่างถาวรแทนที่จะไปที่ถังรีไซเคิล ไฟล์ REG นี้ใช้ข้อมูลที่รวบรวมจากบทความ TechNet นี้ซึ่งกล่าวถึงวิธีการเปิดใช้งานถังรีไซเคิล ตัวอย่างแมปไดรฟ์ Q virutal ไปยังโฟลเดอร์ "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
เพียงเพิ่มข้อมูลเล็กน้อยฉันมีระบบ Win 10 64 บิตและฉันทดสอบสิ่งที่เกิดขึ้นเมื่อลบออกจากแอพ 32 บิต (FastStone Image Viewer) และฉันพบว่าถังรีไซเคิลไม่ทำงานสำหรับ 32 แอพบิตที่ไม่มีปุ่ม Wow6432Node
โทนี่ Pulokas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.