วิธีลบไฟล์ใน Windows ที่มีชื่อไฟล์ยาวเกินไป? [ซ้ำ]


202

คำถามนี้มีคำตอบอยู่ที่นี่แล้ว:

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


ไฟล์เหล่านี้ถูกสร้างขึ้นมาได้อย่างไร?
Nick

ขออภัยในความไม่รู้ของฉันในหัวข้อนี้ แต่ Windows ไม่ควรจัดการกับไฟล์เหล่านี้หรือ Windows จะไม่ทำสิ่งที่ Eddins โพสต์โดยอัตโนมัติ (แม้จาก explorer)
Stefanos Kalantzis

2
@ Mokubai- คำถามที่ซ้ำกันควรจะทำเครื่องหมายที่ซ้ำกันของหนึ่งในนี้เป็นคำถามนี้เป็นรุ่นเก่า
AStopher

1
@cybermonkey: และมีคำตอบที่ดีกว่า
Ellesedil

สำหรับผู้อ่านต่อไปที่วิธี 7zip กับCTRL+DELETEเป็นวิธีที่ง่ายที่สุดในความคิดของฉัน ...
คริสเตียน Gollhardt

คำตอบ:


426

เมื่อคุณต้องการที่จะลบไดเรกทอรีอย่างสมบูรณ์และมันมีเส้นทางยาวrobocopyทำงานได้ดีมาก:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

งานนี้เพราะ robocopy ภายในใช้รุ่น Unicode ตระหนักถึงฟังก์ชั่น Win32 กับ\\?\คำนำหน้าสำหรับเส้นทางแฟ้ม ; ฟังก์ชั่นเหล่านั้นมีขีด จำกัด ของ2¹⁶-1 (32,767) ตัวอักษรแทน 259

คุณอาจต้องทำขั้นตอนนี้มากกว่าหนึ่งครั้งเพื่อกำจัดไฟล์ทั้งหมด


1
มีประสิทธิภาพเมื่อไม่มีชื่อย่อ (8.3) เก็บไว้ในระบบไฟล์
แอนทอน RODRIGUEZ

1
สิ่งนี้ใช้ได้ดีกับไฟล์แคช Windows Store ของฉันที่ไม่ยอมลบ ขอบคุณ!
Samir

1
ฉันต้องเพิ่ม / กำจัดบรรทัด robocopy เพื่อให้ทำงานได้ แต่มันก็ทำอุบายหลังจากนั้น
actionshrimp

3
Robocopy เป็นสิ่งที่ทำให้ฉันมีความยุ่งเหยิงนี้ แต่ฉันไม่เคยใช้ Robocopy ในการกำจัดมันออกไป คำตอบที่ดี! ขอบคุณ!
Jay Michaud

2
@SarahofGaia ไม่ดีของฉันมัน2¹⁶ - 1 จริง
เบอนัวต์

91

จากพรอมต์คำสั่ง:

dir /X

นี่จะแสดงรายการไฟล์ / โฟลเดอร์ของคุณในรูปแบบชื่อย่อ จากนั้นใช้ชื่อย่อตามที่เขียนเพื่อลบไฟล์:

del LONGF~1.txt

1
ฉันชอบอันนั้นมันเป็นความคิดด้านข้างที่ดี
Col

แม้ว่าฉันจะไม่สามารถรับประกันได้ว่ามันจะทำงานในกรณีนี้ฉันใช้มันหลายครั้งในการลบโฟลเดอร์ที่มีอักขระที่ไม่ถูกต้องในตอนท้ายซึ่งทำให้ไม่สามารถลบได้ด้วยวิธีปกติ
Will Eddins

1
สิ่งนี้ใช้ได้กับไฟล์และโฟลเดอร์ในไดเรกทอรีปัจจุบัน แต่ถ้าคุณจัดการค้นหาตัวเองในโฟลเดอร์ที่พา ธ ยาวเกินไปมันจะไม่ช่วย ยกตัวอย่างเช่นผมอยู่ในคอนโซลในเส้นทางที่ยาวเกินไปและไม่สามารถแม้แต่จะหรือdir cd ..
Bobson

1
@Bobson หากคุณไม่สามารถdirใช้pushdแทน ที่ทำงานให้ฉัน
BadHorsie

4
สิ่งนี้ไม่สามารถใช้งานได้กับ Windows 10 ชื่อไฟล์ที่แสดงมีความยาว
Loenix

53

ฉันไปทางไปสู่เส้นทางเปลี่ยนชื่อโฟลเดอร์หลักที่ต่อเนื่องกันเป็น "1" และพยายามลบ คุณกำลังทำให้เส้นทางสั้นลงอย่างมีประสิทธิภาพในแต่ละครั้งและฉันไม่เคยทำงานในไดเรกทอรีมากกว่า 4 หรือ 5 ครั้งจนกว่าฉันจะสามารถลบโครงสร้างไดเรกทอรีทั้งหมดได้ (ซึ่งอาจเป็นหรือไม่ใช่สิ่งที่คุณต้องการ) คุณสามารถทำสิ่งนี้ได้จากโฟลเดอร์ลูกสุดท้ายเช่นกันและใช้วิธีการขึ้นหรือลง


7
นี่เป็นสิ่งเดียวที่ทำงานให้ฉัน เทคนิคอื่น ๆ ทั้งหมดที่ได้รับที่นี่และในฟอรัมอื่นเช่นนี้ใช้ไม่ได้
Andrew Arnott

เป็นข้อเสนอแนะเดียวที่ทำงานผิดปกติพอสมควร
Nestor Ledon

mv * 1 && cd 1นี้ทำงานให้ฉันทางลัดที่ช่วยให้ฉันเป็น สิ่งนี้ไม่ทำงานเมื่อมีหลายไฟล์อยู่ในไดเรกทอรี แต่ ณ จุดนั้นrm -rf *มักจะเป็นการหลอกลวง
Alexander Varwijk

1
ไม่สามารถทำได้ใน windows 10 ... เปลี่ยนชื่อพ่น "ชื่อไฟล์เป็นข้อผิดพลาด"
Dawesi

3
สิ่งนี้ไม่เพียงแก้ไขปัญหาให้ฉันเท่านั้น แต่ยังอธิบายวิธีที่ฉันลงเอยด้วยปัญหาตั้งแต่แรก ฉันต้องมีเส้นทางที่ใกล้ถึงขีด จำกัด จากนั้นฉันเปลี่ยนชื่อโฟลเดอร์หลัก (เพิ่มบางอย่างเช่น "backup Nov 2016 save" เป็นชื่อ) ซึ่งผลักไฟล์ในโฟลเดอร์ย่อยเกินขีด จำกัด ดีใจที่ได้ทราบสาเหตุและวิธีการแก้ไขแม้ว่าฉันจะรู้ว่ามันสามารถเกิดขึ้นได้ด้วยวิธีอื่นฉันก็คิดว่านี่เป็นวิธีการทั่วไปที่เกิดขึ้นกับคนทั่วไป
eselk

13

ในบางโปรแกรมรวมถึง Command Prompt ( cmd.exe) คุณจะสามารถจำกัดความยาวของไฟล์ได้โดยการใส่คำนำหน้าพา ธ แบบเต็ม\\.\ดังนี้:

\\. \ C: \ some directory \ other directory \ a ไฟล์ที่มีชื่อยาว

3
ไม่ทำงานใน windows 10
Dawesi

ขอบคุณ cmd ใช้เสน่ห์กับสิ่งนี้ใน Win7rm -rf \\directoryname
Philip Pryde

13

เคล็ดลับที่ฉันใช้เพื่อให้ได้ข้อจำกัดความยาว "เส้นทางแบบเต็มและชื่อไฟล์" เพื่อที่จะย้ายคัดลอกหรือลบบางสิ่งบางอย่างเพื่อย่อให้สั้นลงโดยการ 'แบ่ง' ลงครึ่งทาง (หรือมากกว่า) โดยใช้ตัวอักษรไดรฟ์ที่แมปชี้ไปยังโฟลเดอร์ วิธีลงเส้นทาง

ดังนั้นคุณมี c: \ some \ long \ path ... \ and \ foo \ bar \ folder \ oldfiles \ myoldfile.txt

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

ตอนนี้ไปที่โฟลเดอร์ที่ใช้ร่วมกันหรือหนึ่งในนั้นและแบ่งปันหรือใช้บรรทัดคำสั่งดังต่อไปนี้ สมมติว่าคุณแชร์โฟลเดอร์ "foo" เป็น "fooshare" จากนั้นคุณสามารถทำได้

net use x: \\mycomputername\fooshare\bar\folders /persistent:no

และไดรฟ์ X: ชี้ตรงไปยังโฟลเดอร์ "โฟลเดอร์" ในส่วนแบ่งนั้นโดยตรงดังนั้น "x: \ oldfiles \ myoldfile.txt" จึงค่อนข้างสั้น

("/ ถาวร: ไม่" หมายความว่าสิ่งนี้จะไม่รอดจากการรีบูตครั้งถัดไปและทำให้คุณสับสนในภายหลังอย่าลืมยกเลิกการแชร์โฟลเดอร์ของคุณเมื่อเสร็จสิ้น)

โปรดจำไว้ว่าคุณไม่จำเป็นต้องแชร์โฟลเดอร์ที่มีไฟล์จำเป็นหากอยู่ในโฟลเดอร์แชร์แล้วคุณสามารถแมปผ่านการแชร์และโฟลเดอร์ซ้อนไปยังโฟลเดอร์เป้าหมายใกล้กับไฟล์และทำงานได้ดี

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


4
คุณสามารถหลีกเลี่ยงการแบ่งปันโดยใช้subst x: C:\Some\first\part\of\the\long\pathและหลังจากนั้นลบไดรฟ์ด้วยsubst x: /d
mihi

1
เยี่ยมมากลอง แต่เมื่อคุณมี 10 โฟลเดอร์จาก k ที่อยู่ติดกันมันเป็นไปไม่ได้
Julian Knight

substเคล็ดลับดูเหมือนว่าจะทำงานได้ดีตราบเท่าที่ชื่อไฟล์ไม่ได้ดังนั้นตราบใดที่จะทำให้มันไปกว่า 260 ตัวอักษรแม้ที่รากของไดรฟ์
Stephen Chung

คุณไม่จำเป็นต้องแชร์โฟลเดอร์ใด ๆ อย่างชัดเจนด้วยnet useคุณสามารถใช้ค่าเริ่มต้นของผู้ดูแลระบบร่วมกันได้:net use x: \\localhost\c$\bar\folders /persistent:no
kapex

9

วิธีที่ง่ายที่สุดที่ฉันพบคือการบูตจากซีดีสดอูบุนตู

คุณสามารถสร้างโฟลเดอร์แชร์ได้ครึ่งทางจากนั้นแมปไดรฟ์เครือข่ายนั้นและทำการลบจากโฟลเดอร์ที่แมป (แม้ในเครื่องเดียวกัน)


17
เป็นเรื่องตลกที่อูบุนตู Live CD จะช่วยแก้ไขปัญหา Windows ได้บ่อยแค่ไหน ^^
Ivo Flipse

1
ฉันพบว่าตัวเองพยายามหลบเครือข่ายซีดีสดปัญหาระบบแฟ้มลองซีดีสดตารางพาร์ทิชันเสียหาย ฯลฯ เป็นต้น :-)
Col

นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน ฉันรักคุณลินุกซ์! <3
เดวิดฟราย

1
เรียกใช้ bash จาก windows ไม่จำเป็นต้องใช้ Linux ;-) นอกจากนี้หากคุณใช้งาน Windows 10 เพียงแค่ติดตั้ง“ Windows Subsystem สำหรับ Linux” โดยทั่วไป windows จะใช้ ubuntu api hooks เพื่อทำงานให้เสร็จ ... utils รวมถึง "apt, ssh, rsync, ค้นหา, grep, awk, sed, เรียงลำดับ xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch และส่วนมากของแพ็คเกจไบนารีจำนวนนับหมื่นใน Ubuntu "นี่เป็นสภาพแวดล้อมการพัฒนา Linux เต็มรูปแบบที่เพิ่งเกิดขึ้นที่ทำงานบน Windows zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10
Dawesi

cygwin เป็นอีกทางเลือกหนึ่งสำหรับการเรียกใช้คำสั่ง LINUX ใน windows
atom88

5

เปลี่ยนชื่อไดเรกทอรีของตัด / วางไฟล์ที่อื่นแล้วลบ ทำงานที่นี่

หรือเพียงแค่จากพรอมต์คำสั่งหากคุณไม่รู้สึกอยากเจอปัญหา


งานนี้มีเสน่ห์เหมือนกัน ขุดลงไปที่นั่น (สำหรับฉันมันคือnode_modulesโฟลเดอร์ที่ซ้อนกันสุด ๆ), ลากมันออกไปยังเดสก์ท็อปของคุณและลบออกไป ล้างและทำซ้ำในขณะที่คุณเพิ่มโฟลเดอร์ขึ้นสองสามครั้ง ช่างเป็นปัญหาที่น่ารังเกียจ
nickb

7
สิ่งนี้ไม่ได้ผลสำหรับฉัน - การดำเนินการวางล้มเหลวเนื่องจากชื่อไฟล์ยาว - ไม่สำคัญว่าจะตัดตรงไหน
UpTheCreek

1

อาจไม่ใช่วิธีที่ดีที่สุดและฉันสนใจที่จะเห็นสิ่งที่คนอื่น ๆ คิด -

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

นอกจากนี้ยังทำ Google ให้คุณและพบสิ่งนี้ - DelinvFileดูดี แต่ไม่สามารถรับรองได้

แก้ไข - คำเตือนเพิ่งเห็นข้างต้นเป็นเพียงการทดลอง - อาจไม่ดีเท่าที่ฉันคิดไว้ก่อน!


Rimraf ฟรีทำงานได้ดีและทำงานเมื่อความคิดอื่น ๆ ทั้งหมดล้มเหลว มันต้องการ node.js
Julian Knight
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.