ฉันจะลบโฟลเดอร์ที่ซ้อนกันค่อนข้างลึกและหลีกเลี่ยง“ ชื่อไฟล์ยาวเกินไป” ได้อย่างไร?


70

Eclipse สร้างโฟลเดอร์ temp ในหนึ่งในไดเรกทอรีที่ซ้อนกันค่อนข้างลึกเช่น

dir1\dir1\dir1\dir1\...

ฉันไม่สามารถลบโฟลเดอร์นี้ใน Windows ผ่าน Explorer คำสั่งdelหรือrmdirคำสั่งหรือคำสั่ง Cygwin 'rm' ฉันจะลบโฟลเดอร์ที่ยาวมาก ๆ ได้อย่างไร?

มันแค่พูดว่า "ชื่อไฟล์ยาวเกินไป ... "


คำตอบ:


105

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

หากต้องการลบแผนผังไดเรกทอรีเริ่มต้นที่c: \ subdir \ more \ offending_dir :

ขั้นตอนกระบวนการทั้งหมดนั้นง่ายมากเช่นนี้:

  1. cd c:\subdir\more เพื่อ cd ลงในไดเรกทอรีแม่ของมัน
  2. mkdir empty เพื่อสร้างไดเรกทอรีว่าง
  3. robocopy empty offending_dir /mir เพื่อทำมิเรอร์ไดเร็กทอรีที่ว่างเปล่าให้เป็นไดเรกทอรีที่ละเมิด
  4. หลังจากเสร็จสิ้นการรอ! ปิดท้ายด้วย:
  5. rmdir offending_dir เพื่อกำจัดไดเรกทอรีที่ละเมิดตอนนี้และ
  6. rmdir empty เพื่อกำจัดไดเรกทอรีว่างกลางของคุณ

2
ข้อเสนอแนะที่ยอดเยี่ยม ปัญหาของฉันถูกสร้างขึ้นโดย robocopy และในขณะที่คุณอธิบายการแก้ไข robocopy ให้ฉัน
Nathan Garabedian

3
ฉันยังยุ่งกับrobocopyจุดเชื่อมต่อ ขอบคุณที่แสดงให้ฉันเห็นวิธีการใช้งานเพื่อทำความสะอาดเป็นระเบียบ!
Mr.Wizard

robocopy ของฉันไม่ได้สร้างโฟลเดอร์ของฉัน แต่จะลบออกอย่างสมบูรณ์
Sasha

11
ผู้จัดการแพคเกจโหนด (NPM) ทำให้เกิดปัญหานี้สำหรับฉัน มีแพ็กเกจซ้อนกันมากมายด้วยเหตุผลบางอย่าง
David Sherret

เห็นได้ชัดว่าเป็นคำตอบที่ดีที่สุดและเหมาะสมที่สุดดีกว่าสคริปต์แบบเรียกซ้ำแบบเรียกซ้ำ
monic-panic

39

อันที่จริงแล้วค่อนข้างง่ายในการแก้ไข สมมติว่าโครงสร้างไดเรกทอรีเป็นเช่นนี้:

C:\Dir1\Dir1\Dir1\Dir1…

หากต้องการแก้ไขให้เปลี่ยนชื่อแต่ละโฟลเดอร์เป็นชื่อตัวละครหนึ่งตัวจนกว่าจะไม่ลบอีกต่อไป:

  1. เปลี่ยนชื่อC:\Dir1เป็นC:\D
  2. นำทางไปยัง C:\D\
  3. เปลี่ยนชื่อC:\D\Dir1เป็นC:\D\D
  4. นำทางไปยัง C:\D\D\
  5. ไปที่ 1 จนกระทั่งความยาวทั้งหมดของเส้นทางคือ <260

ต่อไปนี้เป็นไฟล์แบทช์เพื่อทำให้กระบวนการทำงานอัตโนมัติ (เวอร์ชันง่าย ๆ นี้ดีที่สุดสำหรับไดเรกทอรีอย่างง่ายเหมือนกับที่อธิบายไว้ในคำถาม ส่งผ่านโฟลเดอร์สูงสุดที่เป็นไปได้ (เช่นC:\Dir1สำหรับC:\Dir1\Dir1\Dir1…หรือC:\Users\Bob\Desktop\New Folderเพื่อC:\Users\Bob\Desktop\New Folder\abcdefghi…)

@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _ 
%0 
popd

คำอธิบายทางเทคนิค

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

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

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

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


หมายเหตุด้านที่น่าสนใจ

หากคุณสร้างโฟลเดอร์ใน Windows 7 Explorer อาจดูเหมือนว่า Explorer อนุญาตให้คุณสร้างไดเรกทอรีย่อยที่มีความยาวรวมยาวกว่าMAX_PATHและมีผลบังคับใช้ แต่จริงๆแล้วเป็นการโกงโดยใช้ "ชื่อไฟล์ DOS 8.3" คุณสามารถเห็นสิ่งนี้ได้โดยการสร้างแผนผังเช่น:

C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
   \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
     \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
      \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
       \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
        \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
         \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
          \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
           \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
            \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\

มันมีความยาว 696 ตัวอักษรซึ่งแน่นอนว่ายาวกว่า 260 มากนอกจากนี้หากคุณนำทางไปยังไดเรกทอรีย่อยด้านในสุดใน Explorer มันจะแสดงตามที่คาดหวังในแถบที่อยู่เมื่อไม่ได้อยู่ในโฟกัส แต่เมื่อคุณคลิกที่อยู่ แถบมันเปลี่ยนเส้นทางไปC:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ซึ่งมีความยาวเพียง 102 ตัวอักษร

ใน XP จะไม่ทำเช่นนี้ แต่จะปฏิเสธอย่างต่อเนื่องเพื่อสร้างเส้นทางที่ยาวกว่าที่รองรับ

สิ่งที่น่าสนใจจริงๆคือการหาวิธีที่ Windows 7 Explorer จัดการกับ "เส้นทางที่ยาวเกินไป" เมื่อNtfsDisable8dot3NameCreationตั้งค่าตัวเลือก


3
มันเป็นไปได้ที่จะสร้างเส้นทางที่ยาวกว่า MAX_PATH, ตามที่อธิบายไว้ที่นี่ น่าเสียดาย\\?` doesn't work with rmdir`
grawity

@grawity ใช่ แต่นั่นเป็นเพราะมันทำงานภายใต้หลักการเดียวกัน: เส้นทางสั้น ๆ ถูกเปลี่ยนชื่อเป็นอีกต่อไป มันแค่ทำแบบไดนามิกโดยการขยายตัวแปรเมื่อเทียบกับการเปลี่ยนชื่อด้วยตนเองเป็น la onger หนึ่ง เป็นไปไม่ได้ที่จะสร้างไดเรกทอรีที่มีพา ธ สัมบูรณ์ยาวเกินไปเมื่อคำสั่งการสร้างมีข้อมูลเพียงพอที่จะกำหนดความยาวทั้งหมด
Synetech

3
@Synetech: ไม่มันทำงานต่างกัน เส้นทางที่ต้องการข้าม MAX_PATH อย่าง\\?\C:\dir\dir\dir\dirแท้จริง ไม่มี "ตัวแปร" ที่เกี่ยวข้อง (แต่อย่างที่ฉันบอกว่ามันใช้งานไม่ได้กับตัวบิวท์อินอื่น ๆด้วยเหตุผลบางอย่าง)rmdircmd.exe
grawity

เช่นลองเรียกใช้md C:\01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 มันจะไม่ทำงานเพราะระบบไฟล์มีข้อมูลเพียงพอที่จะกำหนดว่าความยาวพา ธ ทั้งหมดจะเป็น 263 ตัวอักษรดังนั้นจึงล้มเหลว
Synetech

2
(อย่าสับสนความยาวพา ธด้วยความยาวส่วนประกอบคุณไม่สามารถมีไดเรกทอรีเดียวที่มีชื่อเกิน 255 ตัวอักษรอย่างไรก็ตามคุณสามารถมีพา ธยาวกว่านั้น)
grawity

17

คุณสามารถทำให้เส้นทางสั้นลงโดยใช้substเพื่อสร้างไดรฟ์เสมือน:

C:\>subst Z: "C:\TEMP\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1"

เปลี่ยนเป็นไดรฟ์เสมือน:

cd Z:

ตอนนี้คุณสามารถลบไฟล์:

del *.*

ลบไดรฟ์เสมือน:

cd C:\TEMP
subst Z: /d

ลบไดเรกทอรี:

rd /s dir1

Nope; คำสั่งแรกนั้นจะไม่ทำงานหากไดเรกทอรียาวเกินไป ก็จะกลับข้อผิดพลาดพารามิเตอร์ไม่ถูกต้อง
Synetech

2
@Synetech แน่นอน แต่ถ้าคุณเพียงแค่C:\TEMP\dir1\dir1\dir1นั้นก็จะสั้นลงส่วนหนึ่งของมันจึงช่วยให้คุณได้รับมันเป็นเหมือนข้อเสนอแนะของคุณในการเปลี่ยนชื่อ แต่ด้วยการทำแผนที่แทน ;)
Bobson

@ บ็อบสันโอเคคุณพูดถูก +1 สำหรับคุณทั้งคู่ :-)
Synetech

10

ฉันเขียนแอป C # ขนาดเล็กเพื่อช่วยฉันในการลบโครงสร้างที่คล้ายกันมากที่สร้างโดยการใช้ Robocopy และการสำรองข้อมูลจาก Homeserver ที่ไม่ได้ตั้งใจ โดยค่าเริ่มต้น Robocopy จะถือว่าจุดเชื่อมต่อเป็นโฟลเดอร์ปกติ ... :-( คุณอาจจะยุ่งกับงานใหญ่ ๆ โดยไม่สังเกตเห็น

เครื่องมือนี้มีให้ที่ CodePlex พร้อมไฟล์ต้นฉบับสำหรับผู้ใช้ทุกคน

http://deepremove.codeplex.com


WORKS !!! คำตอบนี้จะต้องทำเครื่องหมายว่าใช้งานได้! ซอฟต์แวร์ทำงานเหมือนเนย .. แก้ไขปัญหาของฉันในไม่กี่วินาที !! ขอขอบคุณ!
Rafique Mohammed

7

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

การใช้ยูทิลิตีที่มีในตัวนี้คุณสามารถทำสิ่งต่อไปนี้

deletefiles c:\yourfolder\subfolder\*.* -r -f

เพื่อลบโครงสร้างโฟลเดอร์ทั้งหมด -r recurses ลำดับชั้นโฟลเดอร์จากไดเรกทอรีเริ่มต้นลง -f ลบโฟลเดอร์ใด ๆ ที่ว่างเปล่า (ซึ่งจะเป็นทั้งหมดของพวกเขาถ้าคุณใช้.เป็น filespec) ที่ DeleteFiles รองรับพา ธ ที่ยาวกว่าขีด จำกัด Windows MAX_PATH เพื่อให้ทำงานได้ดีบนโฟลเดอร์ที่ซ้อนกันอย่างล้ำลึก

DeleteFiles ฟรีและโอเพ่นซอร์สและคุณสามารถคว้าไบนารีหรือซอร์สโค้ดจากGitHubหรือติดตั้งโดยตรงโดยใช้Chocolatey


ขอบคุณเครื่องมือที่ยอดเยี่ยม ++ สำหรับใส่ใน chocolatey;) ทำให้ง่ายต่อการรวมในเครื่องมือ CI!
Charles Ouellet

1
นี่เป็นการหลอกลวง หากคุณมีเส้นทางที่ยาวมากการเพิ่ม> NULไปยังจุดสิ้นสุดสามารถทำให้กระบวนการเร็วขึ้น
ryscl

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

Re: เรียกใช้ DeleteFiles 3 ครั้ง ฉันเคยเห็นเช่นกัน - ฉันเชื่อว่าเป็นเพราะนิสัยใจคอของ Windows บางอย่างที่ล็อคโฟลเดอร์ด้วยไฟล์ในช่วงเวลาสั้น ๆ แม้ไฟล์จะถูกลบ การผ่านหลายครั้งตรวจพบปัญหานี้เป็นครั้งคราวในโฟลเดอร์ย่อยซึ่งอาจซ้อนกันหลายชั้น ฉันเห็นพฤติกรรมเดียวกันกับ Explorer ลบต้นไม้ที่ลึก
Rick Strahl

5

เรียบง่ายและง่ายตอนนี้

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

https://github.com/dev-mraj/fdel

npm install fdel -g

fdel ./node_modules

ฉันไม่รู้ว่าทำไมนักออกแบบเลือกที่จะรวมทุกการพึ่งพาในโครงสร้างเมื่อพวกเขาสามารถทำให้มันมีโครงสร้างแบบแบน ดังนั้นสคริปต์นี้เป็นวิธีที่ง่ายที่สุดสำหรับฉันเนื่องจากฉันใช้ node.js แล้ว
2610529

4

ในขณะที่ทำงานกับ Sikuli ฉันได้รับ jacked กับวนรอบการวนซ้ำของ.s.suliในโปรแกรมที่ทำให้จำนวนของ "calculator.sikuli.calculator.sikuli" ที่ไม่สามารถนับได้ ฉันสามารถย้ายต้นไม้ แต่ชื่อพา ธ ยาวเกินไปที่จะลบ

หลังจากลองใช้วิธีแก้ไขปัญหาหลายอย่างด้วย popd loop แล้ว Scandisk และรับ (ไม่อาจมองเห็น) ได้เลย

ฉันเขียนสคริปต์นี้เพื่อ 'ลงไปลึก' ใน dirs ที่เรียกซ้ำ (ใน dir ที่เรียกว่า 'a') ย้ายพวกมัน (ไปยัง dir ที่เรียกว่า 'b') จากนั้นลบต้นไม้ที่ถูกตัดทอนแล้วย้ายกลับ (เป็น 'a') และทำซ้ำ:

1)cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
.............go deeeeeep in         dir *A*
2) move calculator.sikuli ---> D:\b    
.............move the crazy tree to dir *B*    
3) kill D:\a\calculator.sikuli <---KILL(rd)    
.............wipe dir *A*'s tree    
4) move D:\b\calculator.sikuli ---> D:\a\    
.............move the crazy tree back to dir *A*    
REPEAT
  • REM ใช้เพื่อลบโฟลเดอร์ย่อยที่เรียกซ้ำ
  • REM แนะนำให้หยุดบริการ Windows Search ก่อน (services.msc)

Remdirs.bat

D:
cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
move /-Y calculator.sikuli D:\b
cd D:\b
rd /s/q D:\a\calculator.sikuli
move /-Y calculator.sikuli D:\a
call D:\remdirs2.bat

นี่เป็นเพียงการเรียกใช้เพื่อเรียกใช้ไฟล์แบตช์อีกครั้ง


ฉันใช้เวลาหลายชั่วโมงเพื่อดูสิ่งนี้ ไฟล์. bat นี้เป็นเหมือนของขวัญจากสวรรค์ คุณไซโลเป็นเทวดา xD
Squish

2

เรามีปัญหาเช่นนี้ในที่ทำงานเมื่อคราสตัดสินใจสร้างขยะบนฮาร์ดไดรฟ์ เราแก้ไขโดยใช้ฟังก์ชั่น / MIR ของ robocopy เพื่อมิเรอร์ไดเร็กทอรีว่างเข้าไปในรังที่ซ้อนกัน


1

ฉันจะลองเปิดพร้อมท์คำสั่งและเรียกใช้:

rmdir /s <directory>

ถ้ามันไม่ได้ผลฉันจะไปที่ไดเรคทอรีต้นไม้แล้วลองลบเซ็ตย่อยของไดเรคทอรี - พูดถึง 20 ไดเรกทอรีที่อยู่ด้านในสุด - จากนั้นหาทางออกจากที่นั่น


1
ฉันลองใช้คำแนะนำของคุณด้านบนและยังคงระบุว่า "ไดเรกทอรีไม่ว่างเปล่า" เมื่อฉันเรียกใช้คำสั่งด้านบนหลายระดับ
user39186

1
นั่นเป็นเพราะวิธีนี้ย้อนหลัง ;-)
Synetech

1

หากเป็นโฟลเดอร์เครือข่ายให้แชร์ไดเรกทอรีหลักของไดเรกทอรีนั้นและจับคู่กับไดรฟ์ในเครื่องของคุณแล้วลบโฟลเดอร์ของคุณ


21966 [main] mv 1288 D: \ work \ software \ cygwin \ bin \ mv.exe: *** ข้อผิดพลาดของระบบ - ข้อผิดพลาดภายในที่อ่านสภาพแวดล้อมของ windows - ตัวแปรสภาพแวดล้อมมากเกินไปหรือไม่
user39186

ฉันพยายามย้ายโฟลเดอร์ย่อย aa ที่ซ้อนกัน 20 ระดับและมีข้อผิดพลาดด้านบน
user39186

1

เปิดพรอมต์คำสั่ง

นำทางไปยังโฟลเดอร์ / ไดเรกทอรีที่มี 'dir1' สูงสุด (เราจะถือว่า C: \)

c:\> RD /s dir1

แก้ไข (หลังจากเพิ่มความคิดเห็น) :

ความคิดอื่น ๆ :

MS มีข้อมูลเกี่ยวกับวิธีการจัดการกับปัญหาที่เกิดขึ้น (จำนวนมากของความคิดที่จะลอง) ที่นี่

นอกจากนี้ยังมีเครื่องมือนี้ (ไม่เคยใช้มันเอง) - TooLongPath

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


1
ฉันพบข้อผิดพลาด 3 ข้อต่อไปนี้ขณะใช้คำสั่งด้านบนไดเรกทอรีไม่ว่างระบบไม่สามารถค้นหาเส้นทางที่ระบุชื่อไฟล์ยาวเกินไป
user39186

ฉันพยายามสำรวจว่าระดับ 'n' ลึกและลองใช้คำสั่งเดียวกัน แต่ดูเหมือนว่าจะไม่ช่วย
user39186

สิ่งนี้ได้ผลกับฉันใน win7! ขอบคุณ
leoh

1

โซลูชันอื่น: ไปดาวน์โหลด Total Commander มันเป็นโปรแกรมที่มีประโยชน์มากไม่ใช่แค่เพราะมันรู้จักชื่อไฟล์มานาน

เวอร์ชันที่ไม่ได้ลงทะเบียนเป็น nagware แต่ทำงานได้อย่างสมบูรณ์มันจะทำงานได้


1

สิ่งนี้สามารถทำได้โดยตรงจากบรรทัดคำสั่งหรือในชุดไฟล์โดยการสร้างเส้นทาง UNC ไปยังไดเรกทอรีที่คุณต้องการลบ

ดังนั้นแทนที่จะ

rmdir /s/q c:\mydirectory

ใช้

rmdir /s/q \\?\c:\myDirectory

เส้นทางสไตล์ UNC เช่นนี้อาจยาวกว่าและข้ามขีด จำกัด 260 อักขระได้


ใช้งานไม่ได้ The path \\?\C:\temp\wqiyretiuqyertiuyqwteiyrutqwuiyertiqrqweirqyert\wqteriuwqyetriuqwteiryutwiuertiuyqerieerrt\IOQWUE~1\QIWUYE~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\ OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1 is too long.Windows 7 64-bit
วิกเตอร์

ใช้งานไม่ได้กับ windows 10 ยังยาวเกินไป
BananaAcid

รุ่น `\\?` ได้ผลสำหรับฉันบน windows 10!
ปีเตอร์

0

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


ใช่ แต่อย่างที่ฉันบอกคุณต้องทำงานจากภายนอกไม่เช่นนั้นจะไม่ทำงาน
Synetech

แน่นอน. ฉันพบโดยทั่วไปชื่อโฟลเดอร์ที่ยาวที่สุดมักจะเป็นชื่อแรก (ในโฟลเดอร์แพทช์) หรือนามสกุล ส่วนใหญ่คุณจะต้องเปลี่ยนชื่อโฟลเดอร์หนึ่งหรือสองชื่อเพื่อให้ได้ความยาวที่เหมาะสม
music2myear

ใช่ แต่ถ้าคุณเริ่มต้นด้วยสุดหนึ่งก็จะไม่ทำงานเพราะคำสั่งจะล้มเหลวด้วยren path too long
Synetech

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

> ฉันเพียงแค่เริ่มเปลี่ยนชื่อโครงสร้างโฟลเดอร์ไม่ว่าฉันจะอยู่ที่ใดในต้นไม้ที่กำลังตกลงใช่ถ้าคุณอยู่ในต้นไม้คุณสามารถเปลี่ยนชื่อโฟลเดอร์ได้อย่างน้อยแน่นอน (คุณต้องไปที่พาเรนต์ของมัน) ; คุณอาจเปลี่ยนชื่อโฟลเดอร์ย่อยได้เช่นกัน แต่อาจยาวเกินไป
Synetech

0

ฉันมีปัญหาเดียวกันยกเว้นมันถูกสร้างขึ้นโดยงานการสำรอง Cobian แบบเรียกซ้ำ ฉันกลับกลายเป็นว่าซอฟต์แวร์ Cobian ฟรีรวมถึงแอปพลิเคชัน Deleter ที่สามารถลบโฟลเดอร์ซ้อน ๆ ที่น่ารำคาญเหล่านี้ได้อย่างรวดเร็ว

มันอยู่ใต้เมนูเครื่องมือ


0

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

https://gitlab.imanolbarba.net/imanol/DiREKT

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


-3

ระบบไฟล์ของคุณอาจเสียหาย เรียกใช้ chkdsk เพื่อดูว่ามีการซ่อมแซมอะไรหรือไม่จากนั้นลองลบโฟลเดอร์


ไม่นั่นไม่ใช่ปัญหา ปัญหาคือความยาวพา ธ ทั้งหมดยาวเกินกว่าที่รองรับ ( MAX_PATH=255) สิ่งนี้สามารถเกิดขึ้นได้แม้กับระบบไฟล์ที่ไม่เสียหาย
Synetech

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