การเอาชนะข้อ จำกัด ความยาวพา ธ ไฟล์สูงสุดใน Windows


36

ลูกค้าคนหนึ่งของเราใช้ชื่อเส้นทางที่ยาวมาก ๆ (หลายโฟลเดอร์ซ้อนกัน, ชื่อยาว) และเรามักพบกับ "ปัญหาการศึกษาของผู้ใช้" เป็นประจำเพื่อลดเส้นทางให้เหลือน้อยกว่า 260 ตัวอักษร

มีวิธีแก้ไขปัญหาทางเทคนิคหรือไม่เราสามารถสะบัดสวิตช์บางชนิดใน Windows 7 และ Windows 2008 R2 เพื่อพูดว่า "ใช่แค่เพิกเฉยต่อปัญหาในอดีตเหล่านี้และทำให้ชื่อพา ธ ของอักขระเพิ่มขึ้น +260"

ป.ล. ฉันได้อ่านและไม่ได้รับการแก้ไขโดยการตั้งชื่อไฟล์เส้นทางและ Namespaces ทั้งหมด


3
ที่นี่เราอยู่ในปี 2018 และปัญหายังคงมีอยู่ใน ROBOCOPY ขีด จำกัด 255 เสียงบี๊บที่เกินมันเพียง แต่ไม่คัดลอก
SDsolar

@SDsolar: คุณใช้ robocopy รุ่นเก่าหรือไม่?
Naikrovek

ใช่จะพูดเดียวกัน - หนึ่งที่มีการใช้ robocopy เฉพาะเพราะจะสามารถจัดการกับเส้นทางที่ยาว ...
ร็อบนิโคลสัน

คำตอบ:


12

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


5
ข้อผิดพลาดในซอฟต์แวร์ MS ที่ไม่ได้รวมในระบบปฏิบัติการบางรุ่นนั่นเป็นเรื่องใหม่ ...
Hubert Kario

2
ในที่สุด Windows 10 1607 ก็แก้ปัญหาไฟล์เบราว์เซอร์และมีตัวช่วยในการหลอกแอปพลิเคชั่น Win32 ในการทำงานในโลกใหม่ที่แปลกประหลาดของเส้นทางขนาดใหญ่: howtogeek.com/266621/ …
HackSlash

28

เพียงแค่พูดถึงเคล็ดลับฉันไม่เห็นพูดถึงที่นี่เลย

ยกตัวอย่างไฟล์นี้:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

พา ธ ไฟล์แบบเต็มนี้มีความยาว 290 ตัวอักษร เชลล์ (Windows Explorer) และยูทิลิตี้บรรทัดคำสั่งส่วนใหญ่อาจไม่ยอมให้คุณแตะมัน

ใช้substคำสั่งดังนี้:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

ตอนนี้คุณสามารถเข้าถึง (และลบย้าย ฯลฯ ) ไฟล์ได้ดังนี้:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

และในตอนนี้ชื่อไฟล์มีเพียง ~ 235 ตัวอักษรดังนั้นคุณจะไม่พบปัญหา "ชื่อไฟล์ยาวเกินไป" อีกต่อไป

ในการ Windows API MAX_PATHมีความคงที่ที่น่าอับอายที่รู้จักในฐานะ MAX_PATH คือ 260 ตัวอักษร ระบบไฟล์ NTFS รองรับพา ธ ไฟล์ได้สูงสุด 32,767 ตัวอักษร และคุณยังสามารถใช้ 32,767 ตัวอักษรชื่อเส้นทางยาวโดยการเข้าถึง Unicode (หรือ "กว้าง") รุ่นของฟังก์ชัน Windows API และยังโดย prefixing \\?\เส้นทางที่มี

MAX_PATHถูกตั้งค่าในหินนานมากแล้วในโลก Windows ฉันคิดว่ามันมีบางอย่างที่เกี่ยวข้องกับมาตรฐาน ANSI ในเวลานั้น ... แต่มันเป็นหนึ่งในสิ่งที่ยากมากสำหรับ Microsoft ที่จะเปลี่ยนตอนนี้เนื่องจากขณะนี้เรามีโปรแกรมและแอปพลิเคชั่นนับพันรายการรวมทั้งที่ Microsoft เขียนเองด้วยMAX_PATHและจะล้มเหลวในรูปแบบใหม่ที่แปลกถ้าค่าคงที่เปลี่ยนไปทันที (บัฟเฟอร์ล้น, กองการทุจริต ฯลฯ )


9
ฉันใช้วิธีการคล้ายกับsubstโดยใช้ junctions ของไดเรกทอรีซึ่งอาจจะสะดวกกว่าในการล้างข้อมูลหากคุณต้องการเปลี่ยนแปลงอย่างรวดเร็ว ผมใช้การเชื่อมโยงส่วนขยายเชลล์แต่คุณก็สามารถใช้คำสั่งเพื่อต้องการ:mklink mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
Charles Grunwald

10

คุณสามารถหลีกเลี่ยงข้อ จำกัด นี้ได้โดยใช้สัญลักษณ์ \\? \ C: มันน่าเกลียด แต่มันรองรับความยาวไฟล์สูงสุด 2 ^ 15

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath


2
ใช่ฉันอ่านมันอย่างที่ฉันพูด (ดูลิงค์ของฉัน) แต่ฉันจะได้รับประโยชน์จากมันได้อย่างไร ฉันสามารถแมปไดรฟ์กับ \\? \ บางอย่างได้ไหม ฉันไม่เข้าใจ บทความนี้มีไว้สำหรับโปรแกรมเมอร์ที่ใช้ windows APIs ในขณะที่ฉันทำโค้ดใน. NET เนื่องจากความต้องการที่เกิดขึ้นฉันไม่ได้ใช้ C ++ และไม่สามารถดูได้ว่าสิ่งนี้มีความเกี่ยวข้องกับพนักงานลูกค้าของฉันที่ใช้ windows explorer และกล่องโต้ตอบไฟล์ทั่วไปหรือไม่
Christopher Edwards

1
ท้ายที่สุดก็ไม่มี : - / น่าเศร้า
คริส K

@ChristopherEdwards คุณสามารถสร้างทางแยกไปยังจุดที่ต่ำกว่าในลำดับชั้นของโฟลเดอร์
Hubert Kario

1
@ChristopherEdwards คุณสามารถเชื่อมโยงc:\usr-dataไปยัง `c: \ Users \ VeryLongUserName \ LongFolderName` และบอกให้เขาใช้ชื่อเดิม แต่ถ้าเขาใช้ชื่อโฟลเดอร์เป็นตัวละคร 40 ตัวเป็นประจำสิ่งนี้จะไม่ช่วย ...
Hubert Kario

2
7-zip จะค้นหาและคัดลอกใน \\? \ C: โน้ตอย่างมีความสุขสำหรับสิ่งที่คุ้มค่า
Matt Lyons

9

ขณะนี้ Microsoft มีการแก้ไขที่พร้อมใช้งานสำหรับการเริ่มต้นด้วย Windows 10 ซึ่งมีการอธิบายไว้ในบทความการตั้งชื่อไฟล์เส้นทางและเนมสเปซ MSDN

darthcoder ตอบแล้วพร้อมกับรายละเอียดเกี่ยวกับ\\?\C:สัญกรณ์การทำงาน แต่ขณะนี้มีคีย์รีจิสทรีที่HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)สามารถใช้เพื่อลบข้อ จำกัด MAX_PATH สำหรับระบบเดียว บทความนี้ยังกล่าวถึงการสนับสนุนการควบคุมนโยบายกลุ่มที่Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathsสำหรับองค์กรหรือการใช้งานทั่วทั้งกลุ่มหากจำเป็น


ฉันไม่ได้มีเวลาสำหรับการทดสอบอย่างละเอียด แต่ฉันเห็นผลลัพธ์ที่หลากหลายด้วยวิธีนี้และไม่สามารถยืนยันได้ว่านี่จะแก้ปัญหาสำหรับ Windows [ไฟล์] Explorer ได้
JimNim

2
สิ่งนี้ไม่ทำงานใน File Explorer เพราะถึงแม้ว่าระบบและ NTFS สามารถจัดการเส้นทางที่ยาวได้ แต่ Explorer ก็ไม่สามารถทำการเข้ารหัสซ้ำได้
ingyhere

PS คุณจะต้องใช้หนึ่งในโปรแกรมคัดลอกในลิงก์ SO นี้ที่ด้านบนของ Explorer เพื่อทำให้มันใช้งานได้จริง
ingyhere

1
ข้อมูลดี! ฉันอาจจะติด Robocopy ในกรณีนั้น
JimNim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.