ฉันจะลบไฟล์ / โฟลเดอร์ย่อยทั้งหมดในโฟลเดอร์ที่กำหนดผ่านทางพรอมต์คำสั่งได้อย่างไร


42

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


3
ไม่ใช่เพื่อ nitpick แต่คุณกำลังหาวิธีทำ "จากพรอมต์คำสั่ง" ไม่ใช่จาก "DOS" ไม่มีระบบย่อย DOS ตั้งแต่ Win ME
MDMarra

@ MarkM: ก็มี / เป็นntvdmแต่เป็นระบบ 64 บิตได้รับส่วนแบ่งการตลาดมันเริ่มไม่เกี่ยวข้องมากขึ้น
Joey

คำตอบ:


55

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

del /S C:\Path\to\directory\*

2
ของคุณดีกว่า: D +1 - ลบคำตอบของฉัน
BloodPhilia

3
คำอธิบาย: del หมายถึง Delete และ S ย่อมาจาก Recursive
Tamara Wijsman

3
@Tony_Henrich เรียนรู้เพิ่มเติมเกี่ยวกับคำสั่ง msdos ที่นี่ computerhope.com/msdos.htm
Moab

3
และการใช้ / Q เก็บโฟลเดอร์ย่อยที่ว่างเปล่าซึ่งไม่พึงประสงค์
Tony_Henrich

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

22

ทางออกที่ดีที่สุด: เช่นฉันต้องการลบไฟล์และไดเรกทอรีย่อยทั้งหมดของไดเรกทอรีหลักให้พูดว่า "C: \ Users \ Desktop \ New folder \" วิธีที่ง่ายคือการสร้างแบตช์ไฟล์ที่มีสามคำสั่งด้านล่าง

cd C: \ Users \ Desktop \ New โฟลเดอร์ \

del * / S / Q

rmdir / S / Q "C: \ Users \ Desktop \ New โฟลเดอร์ \"

ที่นี่ก่อนจะทำความสะอาดไฟล์ทั้งหมดในไดเรกทอรีย่อยทั้งหมดแล้วล้างไดเรกทอรีย่อยที่ว่างเปล่าทั้งหมด เนื่องจากไดเรกทอรีการทำงานปัจจุบันคือไดเรกทอรีหลักเช่น "\ New folder" คำสั่ง rmdir จึงไม่สามารถลบไดเรกทอรีนี้ได้


1
ทำงานได้ดีมากยกเว้นการเตือนเมื่อระบบไม่สามารถลบโฟลเดอร์รูทได้
Jerther

2
ไม่ดี. เส้นทางที่มีการกำหนดรหัสแบบยากและเมื่อมองดูแล้วจะไม่ทำให้โฟลเดอร์ว่างเปล่า มันลบมัน อันตรายมากด้วย มันจะลบไฟล์ที่โฟลเดอร์ปัจจุบันหากเส้นทางไม่ออกหรือสะกดผิด
Tony_Henrich

1
ในฐานะ @Tony_Henrich กล่าวว่าrmdirคำสั่งจะลบNew folder
Nuktu

ไม่ได้นี่ใช้งานได้กับการล้าง "โฟลเดอร์ใหม่" โดยไม่ต้องลบโฟลเดอร์เอง ปัญหาเดียวคือมันให้คำเตือนเล็กน้อยเมื่อระบบปฏิบัติการล้มเหลวในการลบโฟลเดอร์หลัก นอกจากนี้คำสั่ง del จะซ้ำซ้อนเว้นแต่คุณจะมีโฟลเดอร์ขนาดใหญ่ซึ่งในกรณีนี้อาจจะเร็วกว่า คุณสามารถแก้ไขได้เช่นนี้ (ขออภัยเกี่ยวกับการขาดตัวแบ่งบรรทัดในความคิดเห็น): set FOLDER = "% userprofile% \ Desktop \ New โฟลเดอร์" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke

3
อันตรายจริง หากมีคนไปข้างหน้าและลบ / เปลี่ยนชื่อโฟลเดอร์ C: \ Users \ Desktop \ New บรรทัดแรกที่มีซีดีล้มเหลวและไฟล์แบตช์ของคุณลบทุกอย่างในไดเรกทอรีปัจจุบัน (ค่าเริ่มต้น) อย่างมีความสุข ซึ่งอาจเป็นไดเรกทอรีการทำงานของคุณหรือ C: \ Windows \ System32 ได้เป็นอย่างดี
Ishmaeel

9

นำทางไปยังไดเรกทอรีหลัก:

pushd "Parent Directory"

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

rd /s /q . 2>nul

1
ว้าวนั่นมันแฮ็ค :)
Tarnay Kálmán

1
นี่เทียบเท่ากับคำตอบก่อนหน้านี้สองข้อ
สกอตต์

เห็นด้วยกับข้างต้น - นี่คือสำเนาของคำตอบก่อนหน้าแทนที่ด้วยคำสั่งที่มีความหมายเหมือนกันกับคำสั่งที่พวกเขากำลังแทนที่ pushdไม่ได้เพิ่มอะไรที่นี่ซึ่งcdยังไม่ได้ทำ
Hashim

นี่เป็นเพียงหนึ่งเดียวที่ฉันสามารถใช้จนถึงตอนนี้ซึ่งทำงานได้ดีกับสิ่งที่ผู้ถามถามคนอื่น ๆ เพียงแค่ลบไฟล์ทั้งหมด แน่นอนrmdir /s path-to-folderจะลบโฟลเดอร์ที่มีทุกสิ่งในนั้น แต่ผู้ถามต้องการทราบวิธีการลบทุกอย่างในไดเรกทอรีการทำงาน
Katz_Katz_Katz

คำตอบนี้ใช้ได้ดีที่สุดสำหรับฉัน ด้วยคำตอบอื่น ๆ ทั้งหมดมันไม่ได้ลบไดเรกทอรีที่ไม่ว่างเปล่าเมื่อใช้ / Q และจะขอการยืนยันเสมอเมื่อไม่ได้ใช้ / Q
marijnr

5
rmdir "c:\pathofyourdirectory" /q /s

อย่าลืมที่จะใช้คำพูดและ/q /sมันจะลบที่เก็บทั้งหมดและโดยไม่ต้องแจ้งให้


2
คำถามคือ "ฉันต้องการลบไฟล์และโฟลเดอร์ย่อยทั้งหมดในไฟล์แบตช์ใน Windows 7 และเก็บโฟลเดอร์ด้านบนไว้ "
Werner Henze

5

คุณสามารถใช้ rmdir เพื่อลบไฟล์และโฟลเดอร์ย่อยเช่นนี้:

rmdir /s/q MyFolderPath

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

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath

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

rmdirคำสั่ง (ทั้งสองเหมือนกัน) จะลบโฟลเดอร์หลัก นี่ไม่ใช่คำตอบสำหรับคำถาม ทำไมคนไม่อ่าน?
Hashim

3

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

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

แล้วคุณจะเรียกมันว่า:

empty_my_folder.bat "C:\whatever\is\my folder"

3

คุณสามารถทำได้อย่างรวดเร็วและง่ายดายโดยใส่คำแนะนำทั้งสามนี้ลงในไฟล์ bat ของคุณ:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder

สิ่งนี้มีประโยชน์อย่างมากเนื่องจากมันจะลบไฟล์ใด ๆ ที่ซ่อนอยู่หรือระบบ
อ่อนการตอบสนอง

1

สิ่งนี้ใช้ได้ผลดีกว่าสำหรับฉันเมื่อฉันมีช่องว่างในชื่อโฟลเดอร์

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo *** Deleting all files, including the ones in the subdirs, without confirmation *** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\."  (
    echo *** Cleaning out folder: %~1 *** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)

คนมักจะลืมเกี่ยวกับการมีช่องว่างในชื่อ
Kevin Panko

1

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

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

0

นี่คือสิ่งที่ได้ผลสำหรับฉัน

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