วิธีลบไดเรกทอรีที่มีพา ธ / ชื่อยาวเกินไปสำหรับการลบปกติ


380

Windows ดูเหมือนว่าจะมีการจำกัดความยาวชื่อไฟล์เมื่อพยายามที่จะลบแม้ว่ามันจะไม่ป้องกันไฟล์เหล่านั้นจากการถูกสร้างขึ้น

กระบวนการสร้างของเราสร้างไฟล์ชั่วคราวจำนวนหนึ่ง (บิลด์จำนวนมากจาก WSDL) ซึ่งทำงานได้ไม่เกินขีด จำกัด นี้ สคริปต์ ant ของเราสามารถลบออกได้เมื่อทำความสะอาด แต่บางครั้งฉันจำเป็นต้องลบไดเรกทอรี workarea (ที่ทุกไฟล์ temp ไป) โดยไม่ต้องทำการลบทั้งหมดจาก ant

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

หากฉันลองลบไดเรกทอรีจาก Explorer ฉันได้รับข้อผิดพลาด

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

การลองRemove-Itemใน PowerShell ให้ข้อผิดพลาดต่อไปนี้:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

ไม่มีใครรู้ว่าเครื่องมือใด ๆ หรือวิธีที่ง่ายต่อการแก้ไขข้อผิดพลาดการลบโดยไม่ต้องค้นหาไฟล์ปัญหาด้วยตนเองและย้าย / เปลี่ยนชื่อพวกเขา?


2
ฉันพบวิธีแก้ปัญหาก่อนโพสต์คำถามนี้ แต่เนื่องจากคนอื่นอาจพบปัญหานี้ฉันตัดสินใจที่จะโพสต์ไว้เพื่อที่พวกเขาจะได้พบโซลูชันที่ฉันพบ
Herms

โอ้ฉันรู้ แต่โดยทั่วไปเมื่อฉันทำสิ่งนี้ฉันปล่อยให้คำถาม "ไม่ได้รับคำตอบ" สักครู่เพื่อดูว่าใครมีวิธีแก้ปัญหาที่ดีกว่า
Herms

โดยฟาทางออกที่ง่ายที่สุด: youtube.com/watch?v=qQTyTprFAOg
TAW

การใช้งานUbuntuหรืออื่น ๆLinux Bootable CDเราสามารถบูตเครื่องคอมพิวเตอร์ของเราไปยังUbuntuหรือระบบปฏิบัติการอื่น ๆ เป็นการชั่วคราวจากนั้นเราสามารถเลือกโฟลเดอร์และเราสามารถลบได้อย่างง่ายดาย
Kelum Priyadarshane

1
คำถามที่เก่ากว่านี้มีคำตอบที่น่าสนใจเช่นกัน: superuser.com/questions/45697/…
AdamV

คำตอบ:


421

ใช้ตัวจัดการไฟล์7-Zipเพื่อลบทิ้ง

หากคุณยังคงมีปัญหาตรวจสอบให้แน่ใจว่าคุณใช้Shift+ Deleteภายใน 7-Zip File Manager มิฉะนั้น Windows จะพยายามย้ายพวกเขาไปยังถังรีไซเคิล (ซึ่งจะล้มเหลวอีกครั้ง)


5
ขอบคุณ - นี่เป็นการกำจัดต้นไม้ dir ที่ซ้ำไปซ้ำมาและลึกเกินไปสำหรับ del / rmdir / rm / explorer ที่จะเอาออก
Martin Beckett

63
การทำงานที่ดีโดยใช้ SHIFT + Del - 7zip ไม่สามารถส่งไฟล์ยาว pathed ไปยังถังรีไซเคิล ....
Cori

66
+1 7 ซิป คุณต้องไปที่โฟลเดอร์แล้วใช้shift + Delเช่น @cori หากคุณเลือกDeleteตัวเลือกจากเมนูบริบท WILl จะล้มเหลว shift + Delมัน!
Urda

8
7zip ใช้งานไม่ได้กับ win7 64 ดังนั้น linux จึงทำได้
Erik Friesen

13
ฉัน upvote นี้เพราะด้วย 7zip คุณสามารถลบได้นอกจากนี้ยังลบโฟลเดอร์ที่มีโฟลเดอร์ซ้อนอยู่ภายใน พบปัญหาของฉันกับโฟลเดอร์ node_module ที่มีโฟลเดอร์ซ้อนกันหลายอึและฉันไม่สามารถลบออกได้ 7zip แก้ไขจากโฟลเดอร์ฐานไร้ที่ติ +1
Gruber

310

ไม่มีคำตอบอื่น ๆ (ฟรี) ที่นี่ทำงานให้ฉัน แต่ฉันพบหนึ่งในเว็บไซต์อื่น:

rimraf <dir>

rimrafเป็นแพ็คเกจNode.jsดังนั้นคุณจะต้องติดตั้ง Node.js ซึ่งรวมถึงnpmด้วย จากนั้นคุณสามารถเรียกใช้:

npm install -g rimraf

จากนั้นคุณสามารถเรียกใช้rimrafจากบรรทัดคำสั่ง

ฉันพบวิธีแก้ปัญหานี้เพราะ NPM เองก่อให้เกิดปัญหานี้เนื่องจากวิธีการพึ่งพาอาศัยของรัง

โดยวิธีการrimrafรับชื่อจากคำสั่ง UNIX rm -rfซึ่งลบไฟล์และโฟลเดอร์ซ้ำ


7
พยายามหลายวิธี มันทำงานได้อย่างสมบูรณ์แบบ!
Duckegg

2
คำตอบที่ดีที่สุดของทั้งหมด :) ใช่มันเป็นเรื่องง่าย
อัล - มาธาฟาร์

2
นี่ควรเป็นคำตอบที่ยอมรับได้
NINCOMPOOP

13
วิธีการแก้ปัญหาของคุณใช้งานได้ แต่นี่คือ f ## k-up ที่ฉันต้องใช้โหนด js โมดูลสำหรับการลบโฟลเดอร์โหนด js โมดูล ... ฉันไม่ต้องการที่จะมีชีวิตอยู่บนโลกใบนี้อีกต่อไป
เบอนัวต์ P

4
โหนดสร้างปัญหาขึ้นมาตั้งแต่แรกสำหรับฉันแล้ว ... น่าสนใจ ... ที่พวกเขามีทางออกด้วย
Eric J.

141

นอกจากนี้ไม่จำเป็นต้องติดตั้งโปรแกรมใด ๆในการแก้ปัญหานี้

ปัญหานี้แก้ไขได้อย่างง่ายดายโดยใช้robocopyติดตั้งมาตั้งแต่ Windows Vista ซึ่งเปิดตัวในปี 2549

ตัวอย่างเช่นrmdir /S /Q <dir>มีการรายงานว่าล้มเหลวในบางกรณี ไม่จำเป็นต้องใช้ 7zip หรือเครื่องมืออื่น ๆ ของบุคคลที่สาม Powershell เป็น overkill Cygwin อาจทำงานได้ แต่คุณอาจยังไม่ได้ติดตั้ง ดังนั้นเรามามุ่งเน้นrobocopy

ความคิดคือการ

  1. ใช้robocopyเพื่อคัดลอก + อัปเดต
  2. จากโฟลเดอร์ว่างใหม่
  3. ไปยังโฟลเดอร์ที่คุณต้องการลบเป้าหมาย

หลังจากดำเนินrobocopyการไดเรกทอรีเป้าหมายจะว่างเปล่าเช่นกัน

คำแนะนำเหล่านี้ใช้สำหรับบรรทัดคำสั่ง เพียงเปิดการค้นหาใน Windows จากนั้นพิมพ์cmdและกด Enter

สมมติว่าเป้าหมายสำหรับการลบคือ:

C:\delete\this folder\with a very long name

เราดำเนินการดังนี้:

  1. สร้างไดเรกทอรีที่ว่างเปล่าC:\emptyfolderก่อน

    mkdir C:\emptyfolder
    
  2. คัดลอก + อัปเดตจากไดเรกทอรีว่างไปยังเป้าหมายโดยใช้ตัวเลือก /purge

    robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
    
  3. ลบไดเรกทอรีว่าง คุณไม่ต้องการมันอีกต่อไป

    rmdir c:\emptyfolder
    

เนื่องจากไม่มีไฟล์หรือโฟลเดอร์ในไดเรกทอรีแหล่งที่มา ( C:\emptyfolder) มันเพียงแค่ลบไฟล์และโฟลเดอร์ภายใต้ไดเรกทอรีเป้าหมาย ( C:\delete\this folder\with a very long name) ซ้ำ!

  • เคล็ดลับสุดท้าย: คุณสามารถหลีกเลี่ยงการเขียนด้วยมือ

    C:\delete\this folder\with a very long name
    

    โดยการลากโฟลเดอร์จากหน้าต่าง Explorer และวางในหน้าต่าง Terminal / cmd

ระวัง : ไฟล์ที่ถูกลบจะไม่ไปที่โฟลเดอร์ถังขยะ ! เมื่อลบแล้วจะไม่สามารถกู้คืนไฟล์ได้

(นำมาจาก"เส้นทางยาวเกินไปหรือไม่ใช้ Robocopy" โดย BVLANGEN )

PS: ฉันรู้ว่าคำตอบนี้อยู่ที่นี่น้อยลงอย่างแท้จริง วิธีลบไฟล์ใน Windows ที่มีชื่อไฟล์ยาวเกินไป? [ซ้ำ]

เบอนัวต์เพิ่ม:

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


11
ขอบคุณมากครับท่าน !! นี้ควรจะเป็นคำตอบที่ได้รับการยอมรับว่าเป็นคนอื่น ๆ ทั้งหมดอย่างใดอย่างหนึ่งไม่ได้ทำงานหรือต้องใช้เครื่องมือของบุคคลที่ 3 :)
MickyD

มันทำงานได้อย่างสมบูรณ์แบบ ... ไม่จำเป็นต้องติดตั้งอะไร (เท่าที่ฉันรู้) และมันก็รวดเร็ว นี่ควรเป็นคำตอบที่ยอมรับได้!
ksumarine

1
สิ่งนี้จะเก็บทรีไดเรกทอรีบางส่วน (หรือทั้งหมด) ภายใต้ "c: \ deletefolder" (เป้าหมาย dir) อย่างไรก็ตามลบทุกอย่างในพริบตาสำหรับฉัน (เดาว่าไฟล์มีขนาดเล็ก) และฉันก็ต้อง <Del> "c: \ deletefolder" ด้วยตนเองเด็ก dirs ถูกลบโดยไม่มีปัญหา ทำงานเหมือนจับใจ +1 ควรเป็นคำตอบที่ยอมรับได้! :)
rld

@rld แต่มี "deletefolder" อยู่มาก่อนหรือไม่ มิฉะนั้นฉันคิดว่ามันควรจะว่างเปล่าถ้ามันเป็นไดเรกทอรีใหม่ มิฉะนั้นมันจะเป็นระเบียบ ฉันสามารถเพิ่มขั้นตอนสุดท้ายสำหรับ "rmdir deletefolder"
hectorpal

1
เมื่อจัดการกับไดเรกทอรีแบบเรียกซ้ำตัวเลือกนี้จะช้ากว่า 7zip มาก หลังจากรอ 20 นาทีฉันเปรียบเทียบกับพวกเขาและตระหนักถึง 7zip แม้ว่าจะไม่แสดงความคืบหน้า แต่ก็วิ่งได้เร็วขึ้น 50 เท่า
แอนดี้เกจ

84

cmdฉันเชื่อว่าฉันได้พบวิธีที่จะลบสิ่งจาก เดิมฉันลองใช้delคำสั่ง แต่นั่นไม่ได้ผล จากนั้นฉันก็จำrmdirได้ ทำดังต่อไปนี้:

rmdir /S /Q <dir>

ดูเหมือนว่าจะได้ทำงาน


105
ไม่ได้ผลสำหรับฉัน :(
Andrew Arnott

อย่าลืมดรอปลงใน cmd ก่อนที่คุณจะพยายามเรียกใช้ rmdir
brianpeiris

8
สำหรับผู้ที่ไม่สามารถใช้โซลูชันนี้ฉันมีโซลูชันทางเลือกที่เหมาะกับฉัน (ที่มีชื่อพา ธ / ชื่อไฟล์ยาวเกินไป): ย้ายไฟล์ / ไดเรกทอรีไปยัง C: \ เพื่อย่อเส้นทางให้สั้นลงแล้วลบออกจากที่นั่น
Anders Sandberg Nordbø

6
เป็นไปได้ที่จะมีไดเรกทอรีที่โซลูชันนี้ใช้งานไม่ได้ซึ่ง 7-Zip สามารถลบได้ ฉันเพิ่งเกิดสิ่งนี้กับฉัน
SamStephens

2
วิธีนี้ได้รับผลลัพธ์ที่ไม่สอดคล้องกัน กรุณาอย่าโหวต
hectorpal

29

เครื่องมือที่ผมใช้เมื่อฉันมีปัญหานี้เป็นFastCopy ฉันเลือกลบทั้งหมดจากเลื่อนลงเลือกไดเรกทอรีฉันต้องการที่จะลบและคลิกลบทั้งหมด

FastCopy ลบภาพหน้าจอข้อความโต้ตอบ

FastCopy เป็นแบบพกพา (ไม่ต้องติดตั้ง) และมีรุ่น 32 บิตและ 64 บิต


3
หากคุณกำลังมองหาเครื่องมือบรรทัดคำสั่งคุณสามารถใช้เครื่องมือขนาดเล็กที่ฉันเผยแพร่ใน GitHub ( github.com/epsitec/Tools-RecursiveDelete )
Pierre Arnaud

ฉันมีไฟล์ / โฟลเดอร์ซ้อนกันที่สร้างขึ้นซ้ำ ๆ นี่เป็นทางออกเดียวที่ทำงานได้
Pierluigi

2
สิ่งนี้ใช้ได้กับฉันเมื่อสิ่งที่บรรทัดคำสั่งล้มเหลวความพยายาม 7zip ล้มเหลว และแม้แต่การสนับสนุนของ Microsoft ก็นิ่งงัน!
Kit Ramos

เหมือนกันที่นี่ - ฉันเริ่มลบไฟล์ด้วย 7zip แต่มันทำหน้าที่แปลกมากและฉันต้อง Shift + Delere แต่ละไดเรกทอรีหลายครั้งติดต่อกันเพื่อลบออกจริง ๆ แต่แล้วฉันก็ลองใช้เครื่องมือนี้และทำงานได้อย่างมีเสน่ห์ . เปิดตัวมันสองครั้งเพื่อกำจัดไฟล์ทั้งหมด ขอบคุณ!
Artanis

ขอบคุณสำหรับฉันเช่นเดียวกับวิธีแก้ปัญหาการทำงานที่ยอดเยี่ยม !!!!
ทิม

26

โดยไม่ต้องติดตั้งซอฟต์แวร์เพิ่มเติมคุณสามารถใช้substคำสั่งเพื่อสร้างนามแฝงชั่วคราวไปยังไดเรกทอรีที่มีชื่อยาว

เช่นหากคุณต้องการลบโฟลเดอร์C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deletedคุณสามารถใช้คำสั่ง

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

จากนั้นคุณสามารถลบX:\folder to be deletedใน Windows Explorer หรือในพรอมต์คำสั่งได้อย่างง่ายดาย ในการลบนามแฝงไดรฟ์ชั่วคราวออกให้ใช้คำสั่ง

subst x: /d

ฉันลองคำตอบอื่น ๆ ทั้งหมด (รวมถึงคำตอบจากคำถามที่คล้ายกันอื่น ๆ ) และนี่เป็นคำตอบเดียวที่จบลงด้วยการทำงานให้ฉัน และมันก็เร็วที่สุด
glenneroo

1
นี่คือคำตอบที่ดีที่สุด: คุณสมบัติที่เรียบง่ายและมีอยู่แล้วภายในไม่มีปัญหากับรีจิสทรี ควรเป็นคำตอบที่ยอมรับได้
Kevin Roche

วิธีที่สะอาดและตรงไปตรงมาที่สุดขอบคุณเคนเน็ ธ
Seth

เอ่อคำตอบนี้ทำให้ฉันกลัวเพราะจริง ๆ แล้วฉันมีไดรฟ์ X: มีข้อมูลไม่เพียงพอที่นี่และฉันไม่แนะนำให้คนติดตามโดยไม่มีคำอธิบายเพิ่มเติม
qodeninja

25

Cygwin rm -rfทำงานได้ดีบนเส้นทางยาว!


3
Cygwin ทำงานให้ฉันอย่างสมบูรณ์แบบ! เพิ่งทำ -rm -rf และลบไฟล์ทั้งหมดแล้ว
Ranhiru Jude Cooray

3
ทำงานให้ฉันด้วยภายใต้ GNU ทุบตีรุ่น 4.1.10 (4)
เผยแพร่

2
ทำงานได้ดีเมื่อทำงานจากหน้าต่างคำสั่ง Git Bash ฉันติดตั้ง GitGui แล้ว

22

เพียงแค่วางจาก Powershell เข้าสู่คำสั่งโดยทำงานด้านล่าง:

Cmd /C "rmdir /S /Q <dir>" 

3
"ไดเรกทอรีไม่ว่างเปล่า" อุ่ย OP ต้องการลบโฟลเดอร์ที่ไม่ว่างเปล่า
leye0

สิ่งนี้แตกต่างจากคำตอบของ @herms อย่างไร
bigbadmouse

18

ทางออกของ Dentrasiคือสิ่งที่ดีที่สุดสำหรับฉัน แต่ฉันต้องการโพสต์ขั้นตอนเฉพาะในคำตอบระดับสูง

  1. ดาวน์โหลดและติดตั้งการสร้างเสถียรล่าสุด7zip
  2. เรียกใช้ตัวจัดการไฟล์ 7zip ( 7zfm.exe )
  3. ในตัวจัดการไฟล์ 7zip นำทางเพื่อให้คุณสามารถเห็นชื่อของโฟลเดอร์ที่คุณต้องการลบ (เช่นคุณอยู่ในโฟลเดอร์หลัก)
  4. กดปุ่ม Shift ค้างไว้
  5. คลิกที่ " ลบ " ปุ่มบนแป้นพิมพ์ของคุณหรือในแถบเครื่องมือ 7zip จัดการไฟล์; ตรวจสอบให้แน่ใจว่าคุณยังคงกดแป้น Shift ค้างไว้
  6. คลิกปุ่ม " ตกลง "; ตรวจสอบให้แน่ใจว่าคุณยังคงกดแป้น Shift ค้างไว้

พยายามดี แต่ก็ไม่ได้ผลสำหรับฉันกับโฟลเดอร์แบบเรียกซ้ำจำนวน 10 อันของ k Rimraf ทำงานได้เท่านั้น
จูเลียนอัศวิน

@JulianKnight: ใช่วิธีนี้ไม่ได้ผลสำหรับฉัน 100% ฉันแค่อยากจะพูดถึงมันเพราะมันเป็นกระบวนการที่ตรงไปตรงมามากกว่าและอย่างน้อยก็ใช้เวลาส่วนหนึ่ง สิ่งเดียวที่ฉันพบว่าใช้งานได้ 100% ของเวลาคือแนวทางของสคริปต์ Powershell + NTFSSecurity ซึ่งฉันได้อธิบายไว้ด้านล่าง IIRC rimraf ล้มเหลวเมื่อถูกเรียกซึ่งเป็นวิธีที่ฉันเข้าสู่ระเบียบนี้ตั้งแต่แรก ดูกระทู้ Node.js นี้สำหรับรายละเอียด: github.com/nodejs/node-v0.x-archive/issues/…
Mass Dot Net

ใช่จะมีปัญหาเช่นนั้นเสมอ ในความเป็นจริงมันเป็นรหัสการติดตั้งไลบรารีของ Arduino IDE ที่ทำในฉัน (Java) ฉันบังเอิญเลือกโฟลเดอร์ที่มีไลบรารีเป็นโฟลเดอร์เพื่อติดตั้งไลบรารีจากและนอก! ฉันฆ่ากระบวนการทันทีที่ฉันรู้ แต่มีโฟลเดอร์ของ k's จำนวน 10 รายการ (damn i7 / SSD!) รุ่นหลักถัดไปของ NPM นั้นมีขึ้นเพื่อช่วยแก้ไขปัญหาการติดตั้งไลบรารี่จำนวนมากสำหรับโหนดเนื่องจากการพึ่งพาควรได้รับจาก โครงสร้างที่ประจบมาก แต่ถึงกระนั้นฉันก็ดีใจที่มีคนนำฉันไปที่ rimraf - ง่ายและฟรี
Julian Knight

@JulianKnight - อ๋อวันหรือสองวันที่ผ่านมามีคนบอกฉันว่า npm3 ควรช่วยบรรเทาปัญหาเหล่านี้โดยการป้องกันโครงสร้างโฟลเดอร์ที่พึ่งพาที่ซ้อนกัน
Mass Dot Net

ไม่ทราบว่าจะ "ป้องกัน" หรือไม่ แต่จะจัดการการอ้างอิงที่ซ้อนกันอย่างสมเหตุสมผลมากขึ้นดังนั้นหากแอปหลักของคุณต้องการไลบรารี่ X v1.0 และไลบรารี่ Y ต้องการ Z ซึ่งต้องการ X v1.0 ก็จะใช้ไลบรารี่ระดับสูงสุด ปัจจุบัน Z จะติดตั้ง X เวอร์ชั่นของตัวเอง
Julian Knight

11

มีสองสิ่งที่ไม่ได้กล่าวถึงในคำตอบที่มีอยู่

  1. คุณสามารถใช้คำนำหน้าเส้นทางขยายความยาวเพื่อเข้าถึงเส้นทางยาว
  2. ด้วย Windows 10 คุณสามารถเปิดใช้งานการสนับสนุนพา ธ แบบยาวสำหรับการใช้งานทั่วไปได้อย่างไรก็ตามโปรดทราบว่าแอปพลิเคชันบางอย่างอาจไม่ทำงานกับพา ธ ที่ยาวคุณควรทดสอบซอฟต์แวร์รุ่นเก่ากว่า เฉพาะซอฟต์แวร์ที่มีรายการ Manifest ที่เหมาะสมเท่านั้นจึงจะสามารถใช้สิ่งนี้ได้

คำนำหน้าเส้นทางยาว

Windows API มีฟังก์ชั่นพิเศษที่รองรับชื่อพา ธ Unicode ที่มีความยาวสูงสุด 32k อักขระ (แต่ละองค์ประกอบมีความยาวสูงสุด 255 อักขระ)

สิ่งนี้มักถูกเรียกอย่างผิด ๆ ว่าการตั้งชื่อ UNC แต่มันไม่ได้เกี่ยวข้องกับมัน

คำนำหน้าใช้เพื่อบอกให้ API ใช้เส้นทาง Unicode ที่ยาว\\?\เช่นเดียวกับใน:

\\?\D:\very long path

ชื่อ UNC \\servername\path name\file nameปกติจะใช้เมื่อพูดถึงเส้นทางบนเซิร์ฟเวอร์ระยะไกลในรูปแบบ คุณสามารถรวมสิ่งนี้กับคำนำหน้าเส้นทางยาวดังนั้น:\\?\UNC\server\share

โปรดทราบว่าบางแอปพลิเคชันที่เขียนไม่ดี แต่ค่อนข้างพบได้บ่อยแอปพลิเคชันไม่สนับสนุนพา ธ ไฟล์ UNC หรือคำนำหน้าพา ธ แบบยาว

การอ้างอิง: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

สนับสนุนเส้นทางยาว

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

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

  1. regedit.exeวิ่ง
  2. ยืนยันพรอมต์ UAC
  3. นำทางไปยังคีย์: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. LongPathsEnabledสร้างหรือเปลี่ยนที่สำคัญ
  5. หากไม่มีอยู่ให้คลิกขวาที่นโยบายและเลือกใหม่> Dword (32- บิต) ค่าจากเมนู
  6. ตั้งค่าLongPathsEnabledการ1เพื่อเปิดใช้งาน

แอปพลิเคชันใด ๆ ที่มีรายการรายการที่เหมาะสมจะสามารถเข้าถึงเส้นทางยาวมาตรฐาน POSIX ซึ่งควรรวมถึงแอพ Windows Store

การอ้างอิง: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

อัพเดท 2017-04-09

@maoizm ชี้ให้เห็นปัญหากับรีจิสทรีคีย์ข้างต้นเพื่อให้ฉันไม่บางขุดเพิ่มเติม ดูเหมือนว่าตอนนี้คุณสามารถตั้งค่าการรองรับชื่อไฟล์แบบยาวได้ด้วยคีย์ระบบ:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

สิ่งนี้ยังใช้งานได้เฉพาะกับแอปพลิเคชันที่ตั้งค่าให้ใช้โดยเฉพาะเท่านั้น (ต้องมีรายการใน manifest.xml ของแอปพลิเคชัน)

คุณควรทราบว่าคุณไม่สามารถใช้ชื่อพา ธ สัมพัทธ์กับวิธีนี้ได้


{48981759-12F2-42A6-A048-028B3973495F}Machineส่วนของเส้นทางรีจิสทรีจะแตกต่างกันในคอมพิวเตอร์แต่ละเครื่อง - อาจไม่ชัดเจนสำหรับทุกคน
maoizm

1
@maoizm - จุดดีขอบคุณสำหรับการเน้นที่ โปรดดูการอัปเดตของฉันสำหรับทางเลือกหากใช้การอัปเดต W10 Anniversary หรือใหม่กว่า
Julian Knight

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

สวัสดีมาร์คัสนี่เป็นไลบรารี่ของ Windows หรือไม่ ถ้าเป็นเช่นนั้น. NET มีการสนับสนุนที่จำเป็นอยู่แล้วซึ่งเป็นส่วนหนึ่งของ Windows API ที่เกี่ยวข้องขออภัยที่ฉันไม่ทราบรายละเอียดเนื่องจากฉันไม่ใช่โปรแกรมเมอร์. NET หรือ Win API แต่รายละเอียดควรค้นหาได้บน MSDN
Julian Knight

8

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

C: \

.. โครงการ

.. .. โปรเจคที่ยอดเยี่ยมในช่วงฤดูใบไม้ผลิ 2014

.. .. .. กิจกรรมบางอย่างในสวนสาธารณะในเมืองเป็นวันศุกร์

.. .. .. bla bla bla bla bla bla bla bla bla bla

.. .. .. .. .. ไฟล์จริงที่มีชื่อยาวเกินไป

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

C: \

.. โครงการ

.. .. x

.. .. .. y

.. .. .. .. z

.. .. .. .. .. ไฟล์จริงที่มีชื่อยาวเกินไป

ในกรณีของฉันฉันแค่ต้องการลบโฟลเดอร์ทั้งหมดที่มีโฟลเดอร์ย่อยและไฟล์จำนวนมาก ดังนั้นฉันไม่สนใจชื่อโฟลเดอร์


1
ฉันได้เขียนเครื่องมือเล็ก ๆ ที่ทำเช่นนั้นและนำไปใช้กับ GitHub github.com/epsitec/Tools-RecursiveDelete
Pierre Arnaud

1
คำสั่งทั้งหมดหรือ Shift + DEL ใช้งานไม่ได้สำหรับฉัน
larkee

ใช้งานไม่ได้จริง ๆ เมื่อคุณมีโฟลเดอร์ซ้อนกันอยู่ 10 แห่ง
Julian Knight

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

7

โซลูชัน 7-zip ใช้งานได้ดี ตัวเลือกอื่นถ้าคุณติดตั้งคอมไพล์แล้วคือเปิด bash shell และใช้:

rm -f

(หรือrm -rfสำหรับโฟลเดอร์)


1
สำหรับมือใหม่โปรดอธิบายว่าคุณ "เปิดเปลือก bash" ใน Windows ได้อย่างไร?
OMY

1
@OMY คุณต้องติดตั้งคอมไพล์ จากเมนูเริ่มต้นคุณสามารถเปิดทุบตี git หรือหากคุณเลือกที่จะมีส่วนขยายของเชลล์เมื่อคุณติดตั้ง git แล้วคุณสามารถคลิกขวาหรือในโฟลเดอร์และเลือกGit Bash Here
ผู้ใช้

4

ฉันแนะนำTotal Commander (แชร์แวร์ แต่ยังคงทำงานหลังจากช่วงเวลาทดลองใช้โดยมีเพียงหน้าจอเริ่มต้น nag ขั้นต่ำ) นั่นคือวิธีที่ฉัน allways แก้ชื่อไฟล์ยาวเกินไปปัญหา


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

@Alias ​​Total Commander ทำให้ปัญหานั้นง่ายต่อการตรวจจับอย่างน้อยก็สำหรับฉัน หลังจากระบุปัญหาดังกล่าวแล้วchkdskควรแก้ปัญหา
Sopalajo de Arrierez

เวอร์ชัน 7.0 ไม่ทำงานแสดงข้อความข้อผิดพลาดและแนะนำให้ดำเนินการในฐานะผู้ดูแลระบบซึ่งล้มเหลวเช่นกัน
izogfif

@izogfif: รุ่นล่าสุดสำหรับวันนี้คือ 8.52a ฉันจะลองอันนี้ คุณไม่ได้ให้รายละเอียดเกี่ยวกับข้อความแสดงข้อผิดพลาดของคุณ แต่คุณอาจมีความไม่สอดคล้องกันในโครงสร้างการเก็บถาวรที่ต้องแก้ไข (สำหรับ NTFS อย่างน้อย) ด้วย "chkdsk c: / f" (สมมติว่าไดรฟ์ C :)
Sopalajo de Arrierez

2

คุณสามารถลบได้โดยใช้ชื่อย่อที่เทียบเท่ากัน dir /xจะแสดงพวกเขา


2

ฉันสร้างโปรแกรม java อย่างง่ายที่ใช้ robocopy เพื่อลบไฟล์ jar เป็นสิ่งที่รันได้ สำหรับเอาต์พุตเพิ่มเติมให้รันจากบรรทัด cmd

https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing


2
และถ้าคุณไม่ต้องการใช้ Java คุณสามารถใช้เครื่องมือนี้ที่ฉันเขียนโดยใช้. NET ( github.com/epsitec/Tools-RecursiveDelete )
Pierre Arnaud

@PierreArnaud สุดยอดยูทิลิตี้ ฉันต้องการบางสิ่งเช่นนี้สำหรับการใช้คำสั่งอัตโนมัติ @ CamHart ทำงานได้ดีจากคุณเช่นกัน! ขอบคุณเพื่อน!
amitthk

1

ฉันได้ลองคำตอบอื่น ๆ ทั้งหมด แต่พวกเขาไม่ได้ทำงาน (อย่างน้อยสำหรับฉัน)

ฉันเจอdelinfileและทำงานได้ดีและค่อนข้างเร็ว!

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


1

ไดเรกทอรีที่ใหญ่ขึ้นถูกออกแบบมาสำหรับงานนี้เช่นกัน ป้อนคำอธิบายรูปภาพที่นี่

  • ดาวน์โหลด
  • ใช้การเรียกซ้ำด้วย RemoveDirectoryW เพื่อลบไดเรกทอรีที่มีอยู่
  • ใช้ที่เก็บไฟล์ของตัวเองสำหรับไดเรกทอรีที่สร้างขึ้นใหม่
  • ไฟล์สามารถถูกย้ายจากไดเร็กทอรีก่อนที่จะลบไดเร็กทอรี containg
  • รวดเร็วแม้ว่าการนำทางไปยังด้านบนของไดเรกทอรีเป็นการคลิกต่อหนึ่งไดเรกทอรีที่ซ้อนกัน
  • Windows XP (SP3) ขึ้นไป
  • รหัสที่ไม่ได้รับการจัดการโดยไม่ต้องลงโปรแกรมโดยไม่มีตัวติดตั้งดังนั้นอาจมีคำเตือน Smartscreen เมื่อเรียกใช้จากโฟลเดอร์สำรองเช่นเดสก์ท็อป

ข้อมูลเพิ่มเติมได้ที่CodeProject


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

@ David: ดีกว่า ลิงค์มีประโยชน์มากขอบคุณ
ลอรีสเติร์

1

ฉันประสบปัญหานี้ใน Windows 10 และพบวิธีแก้ปัญหาที่ง่ายนี้

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

ป้อนคำอธิบายรูปภาพที่นี่


1

ได้คำตอบที่สมบูรณ์แบบที่นี่ (สำหรับไฟล์) ทำงานได้ใน Windows 10

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

ดูเพิ่มเติมที่: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

ไม่ใช่คำตอบเดียวใน 4 คำถามก็เพียงพอสำหรับความต้องการของฉัน ยินดีต้อนรับสู่โลกใบนี้


0

ในที่สุดฉันก็ค้นพบวิธีการทำสิ่งนี้ผ่าน Powershell นี่คือคำแนะนำที่ฉันทำตามเพื่อให้มันทำงานบน Windows 7:

  1. สร้างโฟลเดอร์ใหม่ที่ชื่อว่าNTFSSecurityในโฟลเดอร์C: \ Users \ XXXX \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurityโดยที่XXXXเป็นชื่อผู้ใช้ Windows ของคุณ ตัวอย่าง: ถ้าชื่อของฉันคือ " aspnyc " โฟลเดอร์ใหม่จะเป็น C: \ Users \ aspnyc \ Documents \ WindowsPowerShell \ โมดูล \ NTFSSecurity

  2. ดาวน์โหลดแพ็คเกจระบบความปลอดภัยของ PowerShell Module - ควรเป็นไฟล์ ZIP แบบง่าย

  3. เปิดคอนโซล Powershell เรียกใช้Get-Module -ListAvailable และตรวจสอบให้แน่ใจว่าNTFSSecurityแสดงที่ใดที่หนึ่งในรายการของโมดูลที่ลงทะเบียน
  4. ในคอนโซล PowerShell ให้เรียกใช้นำเข้าโมดูล NTFSSecurity
  5. ในคอนโซล Powershell ให้เรียกใช้Remove-Item2 "YYYY" - คืนเงินโดยที่YYYYเป็นพา ธ Windows ไปยังโฟลเดอร์ที่คุณต้องการลบซ้ำ (เช่นC: \ Potatoes \ Badgers \ FolderToDelete )

0

ในที่สุดฉันก็พบวิธีการทำเช่นนี้กับ Powershell ใน Windows 10 ที่ชื่อไฟล์แต่ละรายการยาวเกินไป นี่คือขั้นตอนที่ฉันติดตามเพื่อให้สิ่งนี้ทำงานบน Windows 10:

  1. ดาวน์โหลดแพ็คเกจระบบความปลอดภัยของ PowerShell Module - ควรเป็นไฟล์ ZIP แบบง่าย
  2. แตกไฟล์ Zip เป็นโฟลเดอร์ NTFSSecurity ในไดเรกทอรี C: \ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ Modules
  3. เปิดคอนโซล Powershell ด้วยการยกระดับการดูแล (aka โหมดผู้ดูแลระบบ) และเรียกใช้Get-Module -ListAvailable และตรวจสอบให้แน่ใจว่าNTFSSecurityแสดงที่ใดที่หนึ่งในรายการของโมดูลที่ลงทะเบียน
  4. เรียกใช้Set-ExecutionPolicy ไม่ จำกัดเพื่อข้ามโหมดการดำเนินการที่ลงชื่อ คุณต้องยืนยันการกระทำนี้ด้วย Y (es)
  5. ในที่สุด cd ไปยังโฟลเดอร์ที่คุณต้องการลบ
  6. ในคอนโซล PowerShell ให้เรียกใช้นำเข้าโมดูล NTFSSecurity
  7. ในคอนโซล Powershell ให้เรียกใช้Remove-Item2 "YYYY" -Recurseโดยที่YYYYเป็นพา ธ Windows แบบสัมพัทธ์หรือพา ธ สัมบูรณ์ไปยังโฟลเดอร์ที่คุณต้องการลบซ้ำ (เช่นC: \ Potatoes \ Badgers \ FolderToDelete )
  8. ตรวจสอบว่ามันทำงาน
  9. การตั้งค่าในที่สุดก็กลับไปที่โหมดการดำเนินการเซ็นสัญญากับชุด ExecutionPolicy จำกัด คุณต้องยืนยันการกระทำนี้ด้วย Y (es)

0

หากคุณมี Bash บน Ubuntu บน Windows คุณสามารถ cd ไปที่ไดเรคทอรีหลักในพรอมต์คำสั่งปกติแล้วพิมพ์:

bash -c "rm -rf dirname_here"

ซึ่งเปิดตัวทุบตีลบไดเรกทอรีซ้ำจาก linux ที่ไม่มีข้อ จำกัด ชื่อไฟล์แล้วออกจากกลับไปที่พรอมต์คำสั่งปกติของคุณ


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