ลบโฟลเดอร์ใน Windows โดยสมบูรณ์โดยใช้บรรทัดคำสั่ง


57

ฉันต้องลบโฟลเดอร์หนึ่งที่มีโฟลเดอร์และไฟล์อื่นอยู่ภายใน ฉันพยายามdelและrmdirคำสั่ง แต่บางครั้งพวกเขาล้มเหลวด้วยข้อผิดพลาดบางบรรทัด[PATH]: The directory isn't empty.

มีทางเลือกที่ดีหรือไม่?


ฉันมีประสบการณ์ที่ไม่สอดคล้องกันว่า rmdir พร้อมธงที่เหมาะสมจะลบทุกอย่างในไดเรกทอรีต้นไม้ (และ / หรือต้นไม้เอง) และคำอธิบายเดียวที่เป็นไปได้ที่ฉันมีคือสิ่งที่ Harry Johnston พูด
r_alex_hall

คำตอบ:


15

สิ่งนี้เกิดขึ้นกับฉันมากด้วยสคริปต์สร้างอัตโนมัติของฉัน

ฉันคิดว่าเหตุผลอาจเป็นแอปพลิเคชั่นบางตัวที่มีไฟล์เปิดอยู่ในไดเรกทอรีนั้นด้วย "share delete" คือแอปพลิเคชันอนุญาตให้ลบไฟล์ได้ (ซึ่งเป็นสาเหตุที่ฉันคิดว่าการโทร DeleteFile ไม่ได้ล้มเหลว) แต่ไฟล์จะหายไปหลังจากแอปพลิเคชันดังกล่าวปิดลงเท่านั้น

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

อย่างน้อยนั่นก็คือทฤษฎีของฉัน

วิธีแก้ปัญหาที่เสนอโดย Harry Johnston ดูดี มีเพียงฉันเท่านั้นที่จะแทรกการหยุดชั่วคราวระหว่างrmdirคำสั่ง แน่นอนว่า Windows ไม่มีคำสั่ง "หยุด" ที่เขียนได้ง่าย (การแก้ไข: เวอร์ชันวินโดวส์โบราณไม่ได้ใหม่กว่ามี - ดูความคิดเห็น) แต่ถ้าวินาทีมีความละเอียดเพียงพอก็สามารถใช้pingเพื่อสร้างหยุดชั่วคราว:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

ดังนั้นทั้งหมด:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

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

อืม ... ฉันใช้การลองวนซ้ำ 10x กับการหน่วงเวลาหนึ่งวินาทีต่อการลองใหม่ ใช้งานได้ทันที ฉันจะไม่พยายามลบการหยุดชั่วคราวเพื่อดูว่ามันล้มเหลวอีกครั้ง :-) แน่นอนว่าไม่ได้หมายความว่าจำเป็น เพียงแค่ระมัดระวังเป็นพิเศษ
Paul Groke

2
OT: นี่คือเหตุผลที่ฉันเกลียดหน้าต่าง ทุกอย่างยากมาก rm -rf /directory/ควรเป็นสากลในทุกระบบปฏิบัติการ

2
จริงๆแล้วมีคำสั่ง "หยุดชั่วคราว" เพื่อหยุดชั่วคราวสามวินาทีคุณสามารถใช้สิ่งนี้:timeout /t 3
r_alex_hall

@r_alex_hall แน่นอน (แต่ดั้งเดิมจาก Vista เป็นต้นไป, XP และรุ่นก่อนหน้าไม่มีpauseคำสั่ง)
misha256

57

ลอง:

rmdir /S your_directory

หรือ:

rmdir /S /Q your_directory 

เพื่อข้ามข้อความยืนยัน


1
ฉันลองใช้ตัวเลือกเหล่านี้แล้ว แต่เมื่อฉันเขียนdelและrmdirไม่ถามอะไรเลยพวกเขาเพียงแค่ส่งบางบรรทัดเหมือนคำอธิบาย
Francesco Zanini

2
rmdir /sจะลบสิ่งที่เป็นไปได้ที่จะลบ คุณอาจมีไฟล์ที่ถูกล็อคโดยโปรแกรมไฟล์แบบอ่านอย่างเดียวหรือไฟล์ที่คุณต้องมีสิทธิ์การเข้าถึงระดับผู้ดูแลในการลบ ไม่มีคำสั่งเดียวที่จะคอยดูแลสถานการณ์เหล่านั้นให้กับคุณ
nvuono

หากคุณยังคงได้รับข้อความแสดงข้อผิดพลาดลองด้วย PowerShell: รายการลบ cmdlet มันมีประสิทธิภาพมากกว่า rmdir เล็กน้อย
AndrewQ

1
rmdir / S <directory> กำลังลบไดเรกทอรีและ subfolers และไดเรกทอรี นอกจากนี้ยังถามว่าคุณแน่ใจหรือไม่ บน Windows 10. ขอบคุณ
Jasmeet

1
@r_alex_hall RMDIR / s ลบไฟล์ในไดเรกทอรีอย่างแน่นอน แต่ DEL / s จะลบเฉพาะไฟล์และเก็บไดเรกทอรีซึ่งเป็นสาเหตุที่ RMDIR เป็นตัวเลือกที่ดีกว่า
JCH2k

11

คุณอาจมีไฟล์แบบอ่านอย่างเดียวคุณสามารถใช้ตัวเลือก del / F เพื่อกำจัดไฟล์เหล่านั้นโดยใช้

     del /S /F your_directory
     rmdir your_directory

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

     del /S /F /AH your_directory
     rmdir your_directory

หากสิ่งนี้ยังคงล้มเหลวคุณอาจไม่ได้รับอนุญาตให้ลบไฟล์บางไฟล์หรือบางไฟล์ยังคงใช้งานอยู่


นี่ควรเป็นคำตอบที่ถูกต้อง!
jdhao

4

ฉันเชื่อว่ามีข้อผิดพลาดใน Windows 7 (และอาจเป็นรุ่นอื่น ๆ ) ซึ่งบางครั้งทำให้เกิดอาการนี้; หรืออาจเป็นข้อผิดพลาดในซอฟต์แวร์ของบุคคลที่สาม (คุณมี Symantec Endpoint Protection ติดตั้งโดยบังเอิญหรือไม่?)

อย่างไรก็ตามฉันได้เจอมันบ่อยครั้ง ในกรณีส่วนใหญ่ปัญหาสามารถแก้ไขได้ด้วยการรันrd /s /qสองหรือสามครั้งในแถว

หากนี่เป็นไฟล์แบตช์คุณสามารถทำสิ่งนี้:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

ตกลง การใช้ rd / s foo - ที่ไม่มีตัวเลือก / q silent - จะลบโฟลเดอร์ย่อยทั้งหมดสำหรับคุณ แต่คุณต้องตอบ Y ให้พรอมต์ดังนั้นจึงต้องเข้าร่วมแบตช์ไฟล์ น้อยกว่าอุดมคติฉันรู้
แอนโทนี่

3

ใช้delไฟล์ต่าง ๆ ข้างในแล้วrmdirทำการลบโฟลเดอร์

หากต้องการใช้rmdirวิธีการในการลบไฟล์ทั้งหมดด้วยให้ใช้/Sสวิตช์ก่อนชื่อไดเรกทอรีและ/Qเพื่อไม่ให้พรอมต์สำหรับการลบ นี่เป็นวิธีที่ดีที่สุดในการทำเช่นนี้เพราะคุณจะไม่พลาดไฟล์ใด ๆ ระมัดระวังการใช้สวิตช์ / Q เนื่องจากจะไม่เตือนคุณเกี่ยวกับคุณลักษณะของระบบหรือไฟล์ที่ซ่อน


2

หากคุณใช้โหนดคุณสามารถใช้การพึ่งพาrimrafเช่นนี้:

เรียกใช้การติดตั้ง: npm install rimraf -g

ลบโฟลเดอร์: rimraf SourceFolder

สิ่งนี้ช่วยฉันได้เมื่อเกิดข้อผิดพลาด:

ชื่อไฟล์ต้นฉบับมีขนาดใหญ่กว่าที่ระบบไฟล์รองรับ


0

โฟลเดอร์ Windows รุ่นเก่า (DOS, Windows 95/98 / ME) DELTREEเป็นเทียบเท่ากับหรือRM RMDIRฉันใช้DELTREEกับเวิร์กสเตชัน Windows 7 ของฉันในไฟล์แบตช์ได้ดี

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.

0

ฉันคิดว่าคุณสามารถใช้สิ่งนี้:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"

1
ยินดีต้อนรับสู่ SU! ทำไมฉันถึงลงคะแนน? 1) การจัดรูปแบบไม่ดี 2) มอบโซลูชันที่จำเป็นเช่นเดียวกับที่โพสต์แล้วเมื่อหลายปีที่ผ่านมา (อ่านคำตอบที่โพสต์ก่อนที่จะโพสต์ใหม่เสมอ!) 3) ไม่เหมาะสำหรับคำถาม ไม่ขอ)
zagrimsan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.