ไฟล์ชุด. ลบไฟล์และโฟลเดอร์ทั้งหมดในไดเร็กทอรี


138

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

ขณะนี้ฉันมีสิ่งต่อไปนี้:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

สิ่งนี้จะลบไฟล์. db ทั้งหมดในไดเร็กทอรีRMSของฉันแต่ฉันต้องการลบทุกสิ่งออกจากไดเร็กทอรีนี้ ฉันจะทำเช่นนี้ได้อย่างไร?


3
พิมพ์del /?พร้อมท์ จะให้ข้อมูลเกี่ยวกับวิธีการใช้เครื่องมือ สำหรับกรณีนี้del *.* /sจะใช้ได้แต่อย่าทำในไดเรกทอรีที่ไม่ถูกต้อง!
Michael Todd

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir

ฉันขอแนะนำให้โหวตขึ้นเพื่อเปลี่ยนคำตอบที่ถูกต้อง
GregM

6
คำตอบของ forsvarir จะลบRMSไดเร็กทอรีด้วยซึ่งอาจไม่ใช่สิ่งที่ตั้งใจไว้ (อันที่จริงมักเป็นสิ่งที่ฉันไม่ต้องการเพราะฉันสูญเสียการประทับเวลาดั้งเดิมของไดเร็กทอรีและสิทธิ์ใด ๆ ที่มี) ดูคำตอบของฉันสำหรับวิธีลบเนื้อหาทั้งหมดในไดเร็กทอรี แต่ปล่อยให้ไดเร็กทอรีอยู่ใน สถานที่.
Bill_Stewart

คำตอบ:


52

del *.*del *.dbแทน ที่จะลบทุกอย่าง


58
หมายเหตุ: หากคุณต้องการข้ามข้อความแจ้ง "คุณแน่ใจหรือไม่ว่าต้องการลบ ... " คุณจะต้องเพิ่มแฟล็ก / FQ:del . /F /Q
Rhyuk

41
สิ่งนี้จะลบไฟล์เท่านั้นไม่ใช่โฟลเดอร์
icc97

54
ไม่ควรระบุว่าเป็นคำตอบที่ถูกต้องเนื่องจากไม่ได้ลบโฟลเดอร์ (ตามที่ระบุไว้ในคำถาม)
Bill_Stewart

160

ใช้:

  • สร้างไฟล์แบตช์

  • คัดลอกข้อความด้านล่างลงในไฟล์แบตช์

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

มันจะลบไฟล์และโฟลเดอร์ทั้งหมด


4
เยี่ยมมากฉันกำลังมองหาบางอย่างเพื่อล้างไฟล์และโฟลเดอร์สำหรับงานแบทช์รายเดือนและนี่ก็เป็นเคล็ดลับ
Dave Harding

10
ตรวจสอบให้แน่ใจว่ามีไดเร็กทอรีอยู่ก่อนที่คุณจะดำเนินการนี้
Bill_Stewart

2
หากคุณมีอักขระ 'พิเศษ' ในชื่อไฟล์ของคุณก่อนอื่นchcp 10000ให้เปลี่ยนการเข้ารหัสเป็น UTF-16
Demelziraptor

4
เพียงแค่ต้องการเพิ่มหมายเหตุในความคิดเห็นจาก Bill_Stewart เหตุผลที่คุณต้องการตรวจสอบให้แน่ใจว่ามีไดเร็กทอรีอยู่มิฉะนั้นจะเป็นการล้างไดเร็กทอรีที่คุณอยู่ในขณะนี้ในกรณีของฉันมันเป็นไฟล์แบตช์ที่ฉันใช้งานมานานกว่า 30 นาที :( สิ่งที่ดีที่เหลือของโฟลเดอร์อยู่ภายใต้การควบคุมแหล่งที่มา
helios456

4
@vee เปลี่ยนการวนซ้ำเพื่อ(rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) ระงับข้อผิดพลาดและการลบข้อความ
Carl Walsh

34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

สิ่งนี้จะลบทุกอย่างออกจากโฟลเดอร์ (และโฟลเดอร์นั้นเอง)


16
ฉันคิดว่าคำถามเกี่ยวกับการล้างไดเรกทอรีของเนื้อหาทั้งหมด แต่ไม่ใช่การลบไดเรกทอรีนั้นเอง
Bill_Stewart

16

del *.*จะลบไฟล์เท่านั้น แต่ไม่ใช่ไดเร็กทอรีย่อย หากต้องการลบเนื้อหาของไดเร็กทอรีคุณสามารถใช้สคริปต์นี้:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

การpushdเปลี่ยนแปลงในไดเร็กทอรีที่คุณต้องการลบเด็ก จากนั้นเมื่อถูกrdขอให้ลบไดเร็กทอรีปัจจุบันและไดเร็กทอรีย่อยทั้งหมดการลบไดเร็กทอรีย่อยจะทำได้สำเร็จ แต่การลบไดเร็กทอรีปัจจุบันล้มเหลว - เพราะเราอยู่ในนั้น สิ่งนี้ก่อให้เกิดข้อผิดพลาดที่2> NULกลืนกิน (2 เป็นสตรีมข้อผิดพลาด)


6
ฉันงงงวยว่ามันใช้งานได้อย่างไรเพื่อเป็นคำอธิบายสำหรับคนอื่น ๆ : pushd เปลี่ยนเป็นไดเร็กทอรีที่คุณต้องการลบเด็ก ๆ จากนั้นเมื่อ rd ขอให้ลบไดเร็กทอรีปัจจุบันและไดเร็กทอรีย่อยทั้งหมดการลบไดเร็กทอรีย่อยจะทำได้สำเร็จ แต่การลบไดเร็กทอรีปัจจุบันล้มเหลวเพราะเราอยู่ในนั้น สิ่งนี้ก่อให้เกิดข้อผิดพลาดซึ่ง 2> NUL กลืน (2 เป็นสตรีมข้อผิดพลาด) คุณสจ๊วตเจ้าเล่ห์มาก!
Kinetic

โอ้และ "setlocal enableextensions" จะเปิดความสามารถในการพุชไดเร็กทอรีปัจจุบันไปยังสแตกพร้อมกันและเปลี่ยนไดเร็กทอรี สิ่งนี้ดูเหมือนจะต้องใช้เฉพาะก่อน XP เท่านั้นเนื่องจากมีค่าเริ่มต้นเป็นเปิดอยู่แล้ว
Kinetic

คุณสามารถรวมข้อมูลจากความคิดเห็นลงในคำตอบได้หรือไม่ (ความคิดเห็นอาจหายไปเมื่อใดก็ได้) ( โดยไม่ใช้ ป้ายกำกับ"Edit:" "Update:" )
Peter Mortensen

13

ฉันเพิ่งรวบรวมสิ่งนี้จากสิ่งที่ morty346 โพสต์:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

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


3
ดังนั้นเคล็ดลับสั้น ๆ - หากคุณพยายามเรียกใช้สิ่งนี้บนเส้นทางเครือข่ายแม้ว่าจะมีคำสั่ง "IF EXIST" ก็จะไม่สามารถตั้งค่าโฟลเดอร์ได้และคำสั่งจะถูกบันทึกไว้ในพรอมต์ cmd "เส้นทาง UNC ไม่รองรับซึ่งเป็นค่าเริ่มต้น windows ไดเร็กทอรี "จากนั้นมันจะพยายามลบทุกอย่างในไดเร็กทอรี windows ของคุณ ดังนั้นควรระวัง
CBRF23

11

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

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

RDคำสั่งนอกจากนี้ยังสามารถนำมาใช้ ลบซ้ำ ๆ อย่างเงียบ ๆ โดยไม่มีการแจ้งเตือน:

@RD /S /Q %VAR_PATH%

Rmdir (ถ.)



3

ลองทำดังต่อไปนี้ มันได้ผลสำหรับฉัน

ฉันมีแอปพลิเคชันที่ทิ้งข้อมูลในโฟลเดอร์ "C: \ tmp" ของฉันและสิ่งต่อไปนี้เหมาะกับฉันมากที่สุด มันไม่ได้ถามว่าใช่หรือไม่ใช่เพื่อลบข้อมูล ฉันได้จัดตารางเวลาให้มันทำงานทุก ๆ 5 นาที

cd "C:\tmp"

del *.* /Q

8
หากไม่มีโฟลเดอร์ "C: \ tmp" (หากคุณหรือแอปพลิเคชันอื่นลบโฟลเดอร์นั้น) และหากคุณลองเรียกใช้โฟลเดอร์นี้จะไม่ลบข้อมูลจากโฟลเดอร์อื่นภายใน "C: \" หรือไม่? (มันเกิดขึ้นกับฉัน)
Vikram

4
ดังที่ Vikram บันทึกไว้: 1) สิ่งนี้อันตรายมากและ 2) ไม่ได้ลบไดเรกทอรีย่อยตามที่ระบุไว้ในคำถาม
Bill_Stewart

2
นอกจากโฟลเดอร์แล้ว ... คุณทำได้del /q c:\tmp\*.*ซึ่งปลอดภัยกว่าประมาณล้านเท่า ไม่ต้องพูดถึงcdจะเปลี่ยนเส้นทางเท่านั้นไม่ขับรถ
Nyerguds

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

3

ใช้

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

เวอร์ชันนี้จะลบโดยไม่ถาม:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

ตัวอย่าง:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

C:\foo1\foo\foo\foo3นี้จะล้าง

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


นั่นใช้ไม่ได้เลย rmdir fooเกิดข้อผิดพลาดหากfooไม่ใช่ไดเร็กทอรีว่าง
melpomene

@melpomene พบข้อผิดพลาดและควรได้รับการแก้ไข !!
TravieDude Minecraft และอื่น ๆ

1
ฉันไม่ได้ตั้งใจจะคัดลอก @Abdullah Sabouni แต่อย่างใด ฉันต้องไม่สังเกตเห็นสิ่งนี้ ฉันขอโทษ.
TravieDude Minecraft and More

@melpomene ฉันระบุข้อผิดพลาดและมุมมองของฉันเกี่ยวกับสิ่งที่เกิดขึ้น แต่ฉันตัดสินใจที่จะไม่ลบในกรณีที่มันช่วยได้ ขอบคุณที่ชี้ให้เห็น
TravieDude Minecraft and More

@TravieDudeMinecraftandMore +1 - ทำงานให้ฉันเช่นกัน
Guy Avraham

2

ยังดีกว่าสมมติว่าฉันต้องการลบทุกอย่างในC:\windows\tempโฟลเดอร์

@echo off
rd C:\windows\temp /s /q

11
c:\windows\tempที่เอาไดเรกทอรี ฉันไม่คิดว่านั่นคือสิ่งที่คำถามเดิมถาม
Bill_Stewart

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

1
น่าเศร้าที่การลบและสร้างใหม่ทันทีจากสคริปต์แบทช์ดูเหมือนจะให้ข้อผิดพลาด "การเข้าถึงถูกปฏิเสธ" แบบสุ่มใน Win10 ...
Nyerguds

2

คุณสามารถใช้robocopyเพื่อสะท้อนโฟลเดอร์ว่างไปยังโฟลเดอร์ที่คุณกำลังล้าง

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

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

ต้องมีไดเร็กทอรีว่างที่มีอยู่


1
ตามความช่วยเหลือของ robocopy /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- ดังนั้นฉันค่อนข้างแน่ใจว่า/Eมันซ้ำซ้อน
Nyerguds

0

คุณไม่สามารถลบทุกอย่างด้วยตัวเองrmdirหรือdelเพียงอย่างเดียว:

  • rmdir /s /qไม่ยอมรับพารามิเตอร์ตัวแทน ดังนั้นrmdir /s /q *จะผิดพลาด
  • del /s /f /q จะลบไฟล์ทั้งหมด แต่ไดเรกทอรีย่อยที่ว่างเปล่าจะยังคงอยู่

ทางออกที่ฉันต้องการ (ตามที่ฉันใช้ในไฟล์แบตช์อื่น ๆ ) คือ:

rmdir /s /q . 2>NUL

0

เพียงคำตอบของ GregMเวอร์ชันแก้ไข:

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.

-2
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

คุณมาถูกทางแล้ว เพียงเพิ่มโค้ดเพื่อเพิ่มโฟลเดอร์ที่ถูกลบกลับมาอีกครั้ง


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