Cách xóa tất cả các tệp và thư mục trong một thư mục bằng cuộc gọi cmd


89

Tôi sử dụng Windows.

Tôi muốn xóa tất cả các tệp và thư mục trong một thư mục bằng lệnh gọi hệ thống.

Tôi có thể gọi như vậy:

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

Bạn có biết một cách dễ dàng hơn?



Câu trả lời:


137

Không, tôi không biết.

Nếu bạn muốn giữ lại thư mục gốc vì một số lý do (ACL, & c.) Và thay vào đó thực sự muốn làm trống nó, thì bạn có thể làm như sau:

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

Điều này đầu tiên sẽ xóa tất cả các tệp khỏi thư mục, sau đó xóa đệ quy tất cả các thư mục lồng nhau, nhưng nhìn chung vẫn giữ nguyên thư mục cấp cao nhất (ngoại trừ nội dung của nó).

Lưu ý rằng trong một tệp batch, bạn cần phải tăng gấp đôi %trong forvòng lặp:

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

3
tôi đã có thể làm điều này mà không cần một tệp hàng loạt. sử dụng && để concat hai hoạt động
Matt Broekhuis

1
Tôi là một noob windows-shell hoàn chỉnh: làm cách nào để đặt đích đến một đường dẫn với ví dụ này?
low_rents

Bạn thay thế từ destinationbằng đường dẫn, có thể sử dụng dấu ngoặc kép xung quanh toàn bộ điều đó nếu cần.
Joey

4
Câu trả lời này làm tôi buồn, nó là câu trả lời hay nhất
KCD

1
@stenci: Dòng thứ hai chỉ có thể xóa thư mục đã cho. Nó thực sự làm như vậy một cách đệ quy, nhưng nó không thể xóa một tệp. Do đó, để xóa mọi thứ bên trong một thư mục, bạn phải xóa tất cả các tệp và tất cả các thư mục. Lưu ý rằng đây không phải là việc xóa một thư mục và mọi thứ bên trong. Đó là về việc xóa mọi thứ bên trong và giữ lại thư mục mẹ.
Joey

39

del c:\destination\*.* /s /qđã làm cho tôi. Tôi hy vọng điều đó cũng hiệu quả với bạn.


13
Xóa tất cả các tệp nhưng không xóa các thư mục.
Eric

2
Điều làm việc cho tôi là điều hướng đến thư mục. (shift click chuột phải, chọn mở cmd nhắc đây) sau đódel *.*
Daniel L. VanDenBosch

ví dụ cho đường dẫn tương đốidel "../../server/front-end\*.*"
FindOutIslamNow

@ DanielL.VanDenBosch, điều đó không đúng lắm.
Synetech

29

Tôi nghĩ cách dễ nhất để làm điều đó là:

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

Dấu "\" cuối cùng trong đường dẫn là phần quan trọng.


27
Thao tác này cũng xóa chính thư mục đó.
Archie

Hoàn hảo, đây là những gì tôi cần :)
gNerb

Điều này có hoạt động đệ quy đường dẫn nó quá dài không?
eomeroff

2
kết hợp này với mkdir C:\FolderToNotToDeletelà đủ cho tôi :)
qbolec

1
Điều này có thể có vấn đề nếu thư mục mẹ của bạn (mà bị xóa theo cách này) nắm giữ một số điều khoản quan trọng, mà bây giờ bạn cần phải tạo lại ...
Mladen B.

15

Đúng! Sử dụng Powershell:

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

Quá tệ là PowerShell là một con thú cồng kềnh, cồng kềnh và rất chậm. : - |
Synetech

13

Nếu tên thư mục con có thể chứa khoảng trắng, bạn cần đặt chúng trong dấu ngoặc kép. Ví dụ sau đây cho thấy điều này cho các lệnh được sử dụng trong một tệp lô.

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

6

Để xóa tệp:

del PATH_TO_FILE

Để xóa thư mục có tất cả các tệp trong đó:

rmdir /s /q PATH_TO_FOLDER

Để xóa tất cả các tệp khỏi thư mục cụ thể (không xóa chính thư mục) hơi phức tạp một chút. del /s *.*không thể xóa thư mục, nhưng xóa tệp khỏi tất cả thư mục con. Vì vậy, hai lệnh là cần thiết:

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

Bạn có thể tạo một tập lệnh để xóa bất cứ thứ gì bạn muốn (thư mục hoặc tệp) như sau 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%

Một vài ví dụ về cách sử dụng:

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

1

Một tùy chọn một dòng đơn giản là tạo một thư mục trống ở đâu đó trên hệ thống tệp của bạn, sau đó sử dụng ROBOCOPY( http://technet.microsoft.com/en-us/library/cc733145.aspx ) bằng /MIRnút chuyển để xóa tất cả các tệp và các thư mục con. Theo mặc định, robocopy không sao chép bảo mật, vì vậy các ACL trong thư mục gốc của bạn sẽ vẫn còn nguyên vẹn.

Cũng có thể muốn đặt giá trị cho công tắc thử lại, /r , vì số lần thử lại mặc định là 1 triệu.

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

0

Tôi có một thư mục chỉ mục với 33 thư mục cần xóa tất cả các tệp và thư mục con trong chúng. Tôi đã mở một dòng lệnh trong thư mục chỉ mục và sau đó sử dụng các lệnh sau:

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

Tôi tách chúng thành hai dòng (nhấn enter sau dòng đầu tiên và khi được yêu cầu thêm dòng thứ hai) bởi vì nếu nhập trên một dòng, điều này có thể không hoạt động. Lệnh này sẽ xóa từng thư mục và sau đó tạo một thư mục mới trống, do đó xóa tất cả các tệp và thư mục con trong thư mục gốc.



0

Nó thực hiện 2 bước đơn giản. [/ q có nghĩa là yên lặng, / f có nghĩa là bắt buộc, / s có nghĩa là nhỏ hơn]

  1. Làm trống thư mục để xóa

    del *.* /f/s/q  
    
  2. Xóa thư mục

    cd ..
    rmdir dir_name /q/s
    

Xem tranh


0

hãy thử điều này, điều này sẽ tìm kiếm tất cả MyFolder dưới root dir và xóa tất cả các thư mục có tên MyFolder

for /d /r "C:\Users\test" %%a in (MyFolder\) do if exist "%%a" rmdir /s /q "%%a"
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.