ฉันจะลบแผนผังไดเร็กทอรีผ่านไฟล์แบตช์บน Windows 7 ได้อย่างไร


36

ฉันต้องการลบเนื้อหาทั้งหมดของโฟลเดอร์ที่ระบุใน Windows 7 ผ่านทางไฟล์แบตช์ ปัญหาของฉันคือ 'ลบ' หรือ 'ลบ' ลบไฟล์เท่านั้นไม่ใช่โฟลเดอร์และ 'rmdir' หรือ 'rd' ลบโฟลเดอร์ที่ระบุด้วยเนื้อหาเสมอ แต่ฉันต้องการลบเนื้อหาเท่านั้นไม่ใช่ตัวโฟลเดอร์เอง . ฉันลองคำสั่ง ' rmdir /S /Q "C:\Share\*"' ซึ่งทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์

วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

ฉันกำลังทำงานบน Windows 7 Professional 64 บิตและมีสิทธิ์ผู้ดูแลระบบ

คำตอบ:


36

แบตช์ไฟล์ของคุณจะต้องใช้คำสั่งสองคำสั่งเพื่อลบไฟล์จากนั้นหนึ่งคำสั่งเพื่อลบไดเรกทอรีย่อย ฉันถือว่าไดเรกทอรีที่คุณต้องการลบคือC:\Share\

ไฟล์แบตช์ควรมีลักษณะดังนี้:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q จะทำการค้นหาทรีซ้ำ ๆ ของไดเรกทอรีการลบไฟล์ใด ๆ (แม้จะอ่านไฟล์เท่านั้น) โดยไม่ต้องรอการยืนยัน

บรรทัดที่สองวนซ้ำไปตามไดเรกทอรีย่อยทั้งหมด (ซึ่งตอนนี้ควรว่างเปล่า) และลบออก

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


ถ้าฉันทำการแก้ไขเล็กน้อยที่นี่ "สำหรับ / f %% f" -> "สำหรับ / f% f" มันก็ใช้ได้ดี :) ขอบคุณมาก
Michael K

6
delไม่จำเป็น. rd/s/qจะลบทั้งไฟล์และโฟลเดอร์ย่อย
grawity

1
@grawity delเป็นส่วนใหญ่มีไฟล์ใด ๆ ในโฟลเดอร์รากสามารถลบสลับ recursion แม้ว่า
Windos

5
@MichaelK, %% f สำหรับใช้ในแบตช์ไฟล์,% f สำหรับเมื่อมันเป็นคำสั่งเดียวตรงไปยังบรรทัดคำสั่ง
Windos

1
หากชื่อไดเรกทอรีย่อยใดมีช่องว่างคุณสามารถเพิ่ม "delims =" เพื่อดำเนินการอย่างถูกต้อง (สำหรับ / f "delims =" %% f ใน ... ): ดูstackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

คุณได้รับ "ข้อผิดพลาดทางไวยากรณ์" เนื่องจากrmdirยอมรับเฉพาะชื่อที่สมบูรณ์ไม่ใช่สัญลักษณ์แทน (ในcmd.exeการขยายไวด์การ์ดจะถูกปล่อยให้อยู่ในแต่ละโปรแกรม แต่ไม่ใช่ทั้งหมดที่ทำ)

หากคุณมีไดเรกทอรีจำนวนมากเริ่มต้นด้วยShare...ให้ใช้การforวนซ้ำ

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
ฉันไม่ต้องการลบโฟลเดอร์แชร์
Michael K


2

เกี่ยวกับอะไร

rmdir /S /Q "target"
mkdir "target

แก้ไข: แน่นอนวิธีนี้ใช้ได้เฉพาะเมื่อคุณสามารถทนต่อการขาดโฟลเดอร์ชั่วขณะ


นี่จะเป็นการลบโฟลเดอร์ดั้งเดิม
Michael K

@MichaelK งานของฉันสามารถทนต่อการขาดโฟลเดอร์ชั่วขณะดังนั้นฉันจึงไปกับวิธีแก้ปัญหานี้ ฉันคิดว่ามันง่ายและอ่านง่ายกว่าfor /fในกรณีที่คล้ายกับของฉัน แค่อยากจะแบ่งปัน
Vasilly.Prokopyev

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

สิ่งนี้ใช้ไม่ได้หากไดเรกทอรีย่อยมีไดเรกทอรีอื่นที่มีช่องว่าง

เพื่อที่จะทำให้งานนี้ฉันต้องพูดสตริงสุดท้ายเช่นนี้

สำหรับ / f "delims =" %% f in ('dir / ad / bc: \ share \') ทำ rd / s / q "c: \ share \ %% f"

เห็นได้ชัดว่าสิ่งนี้ทำให้คำสั่งทำงานกับสตริงที่ยกมาแทนเพียงแค่สตริงตัวเอง


0

ฉันจะลองทำสิ่งนี้ในโฟลเดอร์ที่ควรลบโฟลเดอร์ย่อยทั้งหมด แต่ยังคงรูท (และไฟล์ในรูท) ไว้เหมือนเดิม: สำหรับ / D% v ใน (*) ทำ rd / s / q% v

for / D จับคู่ไดเร็กทอรีและ rd / s / q ลบทีละรายการ


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