Tập tin hàng loạt. Xóa tất cả các tệp và thư mục trong một thư mục


135

Tôi muốn có một tệp bó sẽ xóa tất cả các thư mục và tệp trong thư mục bộ đệm cho bộ công cụ không dây của tôi.

Hiện tại tôi có những điều sau đây:

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

Điều này sẽ xóa tất cả các tệp .db trong thư mục RMS của tôi , tuy nhiên tôi muốn xóa mọi thứ khỏi thư mục này. Tôi có thể làm cái này như thế nào?


3
del /?tại dấu nhắc. Nó sẽ cung cấp cho bạn thông tin về cách sử dụng công cụ. Trong trường hợp này, del *.* /ssẽ hoạt động nhưng không làm điều đó trong thư mục sai!
Michael Todd

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

Tôi sẽ đề nghị mỗi phiếu bầu lên để thay đổi câu trả lời đúng
GregM

5
Câu trả lời của forsvarir cũng loại bỏ RMSthư mục, đây có thể không phải là mục đích. (Trên thực tế, đó thường là những gì tôi không muốn, vì sau đó tôi mất dấu thời gian ban đầu của thư mục và mọi quyền mà nó có.) Xem câu trả lời của tôi để biết cách xóa tất cả nội dung của thư mục nhưng để chính thư mục đó địa điểm.
Bill_Stewart

Câu trả lời:


52

del *.*thay vì del *.db. Điều đó sẽ loại bỏ mọi thứ.


56
Lưu ý: Nếu bạn muốn bỏ qua "Bạn có chắc chắn muốn xóa ...", bạn sẽ cần thêm / cờ FQ:del . /F /Q
Rhyuk

40
việc này chỉ xóa các tệp - không phải thư mục
icc97

52
Điều này không nên được đánh dấu là câu trả lời đúng vì nó không xóa các thư mục (như đã nêu trong câu hỏi).
Bill_Stewart

158

Sử dụng:

  • Tạo một tệp bó

  • Sao chép văn bản dưới đây vào tệp bó

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

Nó sẽ xóa tất cả các tập tin thư mục.


4
Thật tuyệt vời, tôi đang tìm kiếm thứ gì đó để dọn dẹp các tập tin và thư mục cho một công việc hàng tháng và điều này đã tạo ra mánh khóe.
Dave Harding

9
Hãy chắc chắn rằng thư mục tồn tại trước khi bạn làm điều này.
Bill_Stewart

2
Nếu bạn có các ký tự 'đặc biệt' trong tên tệp của mình, trước tiên hãy thực hiện chcp 10000thay đổi mã hóa thành UTF-16
Demelziraptor

3
Chỉ muốn thêm một ghi chú vào nhận xét từ Bill_Stewart. Lý do bạn muốn chắc chắn rằng thư mục tồn tại là vì nếu không, nó sẽ xóa bất kỳ thư mục nào bạn đang ở. Trong trường hợp của tôi, đó là tệp bó tôi đã làm việc trong hơn 30 phút. :( Điều tốt là phần còn lại của thư mục nằm dưới sự kiểm soát nguồn.
helios456

2
@vee thay đổi vòng lặp để (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) chặn các thông báo lỗi và xóa
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
)

Điều này sẽ xóa mọi thứ khỏi thư mục (và chính thư mục).


13
Tôi nghĩ rằng câu hỏi là về việc làm trống thư mục của tất cả nội dung, nhưng không xóa chính thư mục đó.
Bill_Stewart

16

del *.*sẽ chỉ xóa các tập tin, nhưng không xóa các thư mục con. Để nuke nội dung của một thư mục, bạn có thể sử dụng tập lệnh này:

@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

Những pushdthay đổi trong thư mục mà bạn muốn xóa con. Sau đó, khi rdyêu cầu xóa thư mục hiện tại và tất cả các thư mục con, việc xóa các thư mục con thành công, nhưng việc xóa thư mục hiện tại không thành công - vì chúng tôi đang ở trong đó. Điều này tạo ra một lỗi mà 2> NULnuốt. (2 là luồng lỗi).


6
Tôi bối rối về chính xác làm thế nào điều này làm việc một chút, vì vậy như một lời giải thích cho người khác: Pushd thay đổi vào thư mục mà bạn muốn xóa trẻ em. Sau đó, khi yêu cầu xóa thư mục hiện tại và tất cả các thư mục con, việc xóa các thư mục con thành công, nhưng việc xóa thư mục hiện tại không thành công - vì chúng tôi đang ở trong đó. Điều này tạo ra một lỗi mà 2> NUL nuốt. (2 là luồng lỗi). Rất xảo quyệt ông Stewart!
Kinetic

Ồ, và "setlocal enableextensions" bật khả năng đẩy đồng thời thư mục hiện tại lên ngăn xếp và thay đổi thư mục. Điều này dường như chỉ được yêu cầu trước XP, vì ở đó và sau này nó mặc định là Bật.
Kinetic

Bạn có thể tích hợp thông tin từ các bình luận vào câu trả lời không (bình luận có thể biến mất bất cứ lúc nào)? ( Nếu không sử dụng "Edit:" "Cập nhật:" nhãn .)
Peter Mortensen

12

Tôi chỉ cần đặt nó cùng nhau từ những gì morty346 đã đăng:

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)
)

Nó thêm một kiểm tra nhanh rằng thư mục được xác định trong biến tồn tại trước, thay đổi thư mục thành thư mục và xóa nội dung.


2
Vì vậy, mẹo nhanh - nếu bạn cố chạy nó trên đường dẫn mạng, ngay cả với câu lệnh "IF EXIST", nó sẽ không đặt thư mục và một câu lệnh sẽ được ghi trong dấu nhắc cmd "Đường dẫn UNC không hỗ trợ, mặc định là thư mục windows "sau đó nó sẽ cố gắng xóa mọi thứ trong thư mục windows của bạn. Vì vậy, hãy cẩn thận.
CBRF23

11

Bạn có thể thực hiện việc này bằng cách sử dụng del/Scờ (để yêu cầu nó lặp lại tất cả các tệp từ tất cả các thư mục con):

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

Lệnh RD cũng có thể được sử dụng. Xóa đệ quy lặng lẽ mà không có dấu nhắc:

@RD /S /Q %VAR_PATH%

Rmdir (lần thứ nhất)


5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)

3

Hãy thử như sau; nó làm việc cho tôi

Tôi có một ứng dụng kết xuất dữ liệu trong thư mục "C: \ tmp" của mình và các ứng dụng sau hoạt động tốt nhất cho tôi. Nó thậm chí không yêu cầu hoặc Không để xóa dữ liệu. Tôi đã lên lịch để nó chạy sau mỗi 5 phút

cd "C:\tmp"

del *.* /Q

7
Nếu thư mục "C: \ tmp" không xuất hiện (nếu bạn hoặc một số ứng dụng khác đã xóa thư mục đó) và nếu bạn thử chạy thư mục này, liệu nó có xóa dữ liệu khỏi thư mục khác trong "C: \" không? (Nó đã xảy ra với tôi)
Vikram

4
Như Vikram lưu ý: 1) Điều này rất nguy hiểm và 2) nó không xóa các thư mục con như đã nêu trong câu hỏi.
Bill_Stewart

2
Ngoài các thư mục điều ... bạn có thể làm del /q c:\tmp\*.*, nó an toàn hơn khoảng một triệu lần. Chưa kể cdsẽ chỉ thay đổi đường dẫn, không lái xe.
Nyerguds

1
Đây là lời khuyên khủng khiếp. Như những người khác đã đề cập, bạn có thể sẽ thanh trừng rất nhiều dữ liệu cần thiết do điều này. Bị đánh dấu để loại bỏ Tôi nghĩ rằng đó là xấu.
RyanfaeScotland

2

Tốt hơn hết, hãy nói rằng tôi muốn xóa mọi thứ trong C:\windows\tempthư mục.

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

11
Điều đó loại bỏ các thư mục c:\windows\temp. Tôi không nghĩ đó là những gì câu hỏi ban đầu được hỏi.
Bill_Stewart

Xóa thư mục có vẻ dễ nhất đối với tôi và nếu tôi cần tạo lại nó sau đó, tôi có thể. Một vấn đề có thể là mất quyền truy cập thư mục đặc biệt. Tuy nhiên, điều này dường như nhiều dễ dàng hơn hầu hết các câu trả lời khác.
madannes

1
Đáng buồn thay, xóa và tạo lại ngay lập tức từ tập lệnh bó dường như đưa ra các lỗi "truy cập bị từ chối" ngẫu nhiên, trên Win10 ...
Nyerguds

2

Bạn có thể sử dụng robocopy để phản chiếu một thư mục trống vào thư mục bạn đang xóa.

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

Nó cũng hoạt động nếu bạn không thể xóa hoặc tạo lại thư mục thực tế.

Nó không yêu cầu một thư mục trống hiện có.


1
Theo sự giúp đỡ của robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).- vì vậy tôi khá chắc chắn rằng nó /Elà dư thừa.
Nyerguds

2

Sử dụng

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

Phiên bản này xóa mà không hỏi:

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

Thí dụ:

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

Điều này sẽ rõ ràng C:\foo1\foo\foo\foo3.

(Tôi muốn đề cập đến câu trả lời Abdullah Sabouin của . Có một hỗn hợp lên về tôi sao chép nó. Tôi không để ý bài của mình. Tôi muốn cảm ơn bạn Melpomene để chỉ ra sai sót!)


Điều đó không làm việc cả. rmdir foolỗi ra nếu fookhông phải là một thư mục trống.
melpomene

@melpomene Mình thấy lỗi rồi nên sửa !!
TravieDude Minecraft và hơn

1
Tôi không có ý định sao chép @Abdullah Sabouni bằng mọi cách. Tôi không phải đã nhận thấy điều này. Tôi xin lỗi.
TravieDude Minecraft và hơn nữa

@melpomene Tôi đã nêu lỗi của tôi và quan điểm của tôi về những gì đã xảy ra. Nhưng tôi đã quyết định không xóa trong trường hợp nó vẫn giúp. Cảm ơn đã chỉ ra rằng.
TravieDude Minecraft và hơn thế nữa vào

@TravieDudeMinecraftandMore +1 - cũng hoạt động với tôi.
Guy Avraham

0

Bạn không thể xóa mọi thứ bằng một rmdirhoặc delmột mình:

  • rmdir /s /qkhông chấp nhận thông số ký tự đại diện. Như vậy rmdir /s /q *sẽ có lỗi.
  • del /s /f /q sẽ xóa tất cả các tệp, nhưng thư mục con trống sẽ vẫn còn.

Giải pháp ưa thích của tôi (như tôi đã sử dụng trong nhiều tệp bó khác) là:

rmdir /s /q . 2>NUL

0

Chỉ là một phiên bản sửa đổi của câu trả lời của 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'.

-1
@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\

Bạn đã đi đúng hướng. Chỉ cần thêm mã để thêm thư mục bị xóa trở lại.


1
Tôi không đề xuất giải pháp này vì nó xóa thư mục (do đó mất quyền) và tạo lại nó (có thể với các quyền khác nhau).
Bill_Stewart

-3

Bạn nên chạy lệnh này để xóa tất cả các tệp:

del*.*

6
giống như câu trả lời được chấp nhận từ ngày 26 tháng 7 năm 21 lúc 21:04. Vui lòng không thêm câu trả lời khi bạn không có điều gì mới.
Stephan

2
Ngoài lời phê bình hợp lệ từ @Stephan, lệnh cần phải có del *.*(có dấu cách)
Ty Hitzeman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.