วิธีลบไฟล์และโฟลเดอร์ทั้งหมดในโฟลเดอร์โดยการโทร cmd


94

ฉันใช้ Windows

ฉันต้องการลบไฟล์และโฟลเดอร์ทั้งหมดในโฟลเดอร์โดยการเรียกระบบ

ฉันอาจเรียกแบบนั้น:

>rd /s /q c:\destination
>md c:\destination

คุณรู้วิธีที่ง่ายกว่านี้หรือไม่?



คำตอบ:


142

ไม่ฉันไม่รู้จักหนึ่ง

หากคุณต้องการคงไดเร็กทอรีเดิมไว้ด้วยเหตุผลบางประการ (ACL, & c.) และต้องการล้างข้อมูลนั้นแทนคุณสามารถทำสิ่งต่อไปนี้:

del /q destination\*
for /d %x in (destination\*) do @rd /s /q "%x"

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

โปรดทราบว่าภายในไฟล์แบตช์คุณต้องเพิ่มเป็นสองเท่า%ภายในforลูป:

del /q destination\*
for /d %%x in (destination\*) do @rd /s /q "%%x"

3
ฉันสามารถทำได้โดยไม่มีไฟล์แบตช์ ใช้ && เพื่อเชื่อมต่อการดำเนินการทั้งสองอย่าง
Matt Broekhuis

1
ฉันเป็น noob windows-shell ที่สมบูรณ์: ฉันจะตั้งค่าปลายทางไปยังเส้นทางด้วยตัวอย่างนี้ได้อย่างไร
low_rents

คุณแทนที่คำdestinationตามเส้นทางโดยอาจใช้เครื่องหมายคำพูดรอบ ๆ สิ่งทั้งหมดหากจำเป็น
Joey

4
คำตอบนี้ทำให้ฉันเศร้าเพราะเป็นคำตอบที่ดีที่สุด
KCD

1
@stenci: บรรทัดที่สองสามารถเพียงลบไดเรกทอรีที่กำหนด มันทำซ้ำได้ แต่ไม่สามารถลบไฟล์ได้ ดังนั้นในการลบทุกอย่างภายในไดเร็กทอรีคุณต้องลบไฟล์ทั้งหมดและไดเร็กทอรีทั้งหมด โปรดทราบว่านี่ไม่ได้เกี่ยวกับการลบไดเร็กทอรีเดียวและทุกอย่างภายใน มันเกี่ยวกับการลบทุกอย่างภายในและเก็บไดเรกทอรีหลัก
Joey

40

del c:\destination\*.* /s /qทำงานให้ฉัน ฉันหวังว่ามันจะเหมาะกับคุณเช่นกัน


13
ลบไฟล์ทั้งหมด แต่ไม่ใช่โฟลเดอร์
Eric

2
สิ่งที่ใช้ได้ผลสำหรับฉันคือไปที่โฟลเดอร์ (เลื่อนคลิกขวาเลือก open cmd prompt ที่นี่) แล้วdel *.*
Daniel L. VanDenBosch

ตัวอย่างสำหรับเส้นทางสัมพัทธ์del "../../server/front-end\*.*"
FindOutIslamNow

@ DanielL.VanDenBosch นั่นไม่ใช่สคริปต์มากนัก
Synetech

29

ฉันคิดว่าวิธีที่ง่ายที่สุดคือ:

rmdir /s /q "C:\FolderToNotToDelete\"

"\" สุดท้ายในเส้นทางคือส่วนสำคัญ


27
นอกจากนี้ยังลบโฟลเดอร์นั้นด้วย
Archie

สมบูรณ์แบบนี่คือสิ่งที่ฉันต้องการ :)
gNerb

สิ่งนี้ทำงานซ้ำเส้นทางที่ยาวเกินไปคืออะไร?
eomeroff

2
รวมสิ่งนี้ด้วยmkdir C:\FolderToNotToDeleteก็เพียงพอแล้วสำหรับฉัน :)
qbolec

1
สิ่งนี้อาจเป็นปัญหาได้หากโฟลเดอร์หลักของคุณ (ซึ่งถูกลบด้วยวิธีนี้) มีสิทธิ์ที่สำคัญบางอย่างซึ่งตอนนี้คุณต้องสร้างใหม่ ...
Mladen B.

15

ใช่ ใช้ Powershell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"

แย่จัง PowerShell เป็นสัตว์ร้ายที่ยุ่งยากป่องช้ามาก : - |
Synetech

13

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

set targetdir=c:\example
del /q %targetdir%\*
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^"

6

ในการลบไฟล์:

del PATH_TO_FILE

ในการลบโฟลเดอร์ที่มีไฟล์ทั้งหมดอยู่:

rmdir /s /q PATH_TO_FOLDER

ในการลบไฟล์ทั้งหมดจากโฟลเดอร์ที่ระบุ (ไม่ใช่การลบโฟลเดอร์เอง) นั้นค่อนข้างซับซ้อนเล็กน้อย del /s *.*ไม่สามารถลบโฟลเดอร์ แต่จะลบไฟล์ออกจากโฟลเดอร์ย่อยทั้งหมด จำเป็นต้องมีสองคำสั่ง:

del /q PATH_TO_FOLDER\*.*
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i"

คุณสามารถสร้างสคริปต์เพื่อลบสิ่งที่คุณต้องการ (โฟลเดอร์หรือไฟล์) mydel.batดังนี้:

@echo off
setlocal enableextensions

if "%~1"=="" (
    echo Usage: %0 path
    exit /b 1
)

:: check whether it is folder or file
set ISDIR=0
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /i "%DIRATTR%"=="d" set ISDIR=1

:: Delete folder or file
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1")
exit /b %ERRORLEVEL%

ตัวอย่างการใช้งานบางส่วน:

mydel.bat "path\to\folder with spaces"
mydel.bat path\to\file_or_folder

1

ตัวเลือกหนึ่งบรรทัดง่ายๆคือสร้างไดเร็กทอรีว่างที่ใดที่หนึ่งบนระบบไฟล์ของคุณจากนั้นใช้ROBOCOPY( http://technet.microsoft.com/en-us/library/cc733145.aspx ) กับ/MIRสวิตช์เพื่อลบไฟล์ทั้งหมดและ โฟลเดอร์ย่อย ตามค่าเริ่มต้น robocopy จะไม่คัดลอกความปลอดภัยดังนั้น ACL ในโฟลเดอร์รูทของคุณควรยังคงอยู่

อาจต้องการตั้งค่าสำหรับสวิตช์ลองใหม่ /rเนื่องจากจำนวนการลองใหม่เริ่มต้นคือ 1 ล้านครั้ง

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3

0

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

for /d in (*) do rd /s /q "%a" & (
md "%a")

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


0

ไปที่ไดเร็กทอรีหลัก

Line1 pushd "ไดเรกทอรีหลัก"

ลบโฟลเดอร์ย่อย

บรรทัดที่ 2 rd / s / q 2> nul

/superuser/173859/how-can-i-delete-all-files-subfolders-in-a-given-folder-via-the-command-prompt


1
ถ้าจะใช้pushdต้องใช้popdด้วย ขออภัยpopdไม่สามารถใช้งานได้เมื่อคุณลบไดเร็กทอรี ดังนั้นคุณต้องทำแทนcd pushd
xmedeko

0

ใช้ 2 ขั้นตอนง่ายๆ [/ q หมายถึงเงียบ, / f หมายถึงบังคับ, / s หมายถึง subdir]

  1. ลบไดเร็กทอรีที่ต้องการลบ

    del *.* /f/s/q  
    
  2. ลบไดเร็กทอรี

    cd ..
    rmdir dir_name /q/s
    

ดูภาพ


0

ลองใช้สิ่งนี้จะค้นหา MyFolder ทั้งหมดภายใต้ root dir และลบโฟลเดอร์ทั้งหมดที่ชื่อ MyFolder

for /d /r "C:\Users\test" %%a in (MyFolder\) do if exist "%%a" rmdir /s /q "%%a"

0
del .\*

คำสั่งนี้จะลบไฟล์และโฟลเดอร์ทั้งหมดจากการนำทางปัจจุบันในบรรทัดคำสั่งของคุณ

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