Tương tự như thế nào?


509

Tôi cần một cách để đệ quy xóa một thư mục và con của nó.

Có một công cụ dựng sẵn cho việc này, hoặc tôi cần phải viết một công cụ?

DEL /S không xóa thư mục.

DELTREE đã bị xóa khỏi Windows 2000+


1
Liệu del / s (a) hoàn toàn không hoạt động (chỉ có sẵn trong một số phiên bản) hoặc (b) rời khỏi thư mục cấp cao nhất nhưng xóa mọi thứ trong đó hoặc (c) rời khỏi tất cả các thư mục trong khi xóa tất cả các tệp?
wnoise

@Aaron, trả lời c, bạn cần sử dụng rmdir / s để xóa thư mục và tệp.
Nêm

31
Nó không thực sự format c:cài đặt Linux sao? Tôi đang đùa tất nhiên.
Basile Starynkevitch

Câu trả lời:


694

RMDIR hoặc RD nếu bạn đang sử dụng Dấu nhắc lệnh cổ điển (cmd.exe):

rd /s /q "path"

Đường dẫn RMDIR [/ S] [/ Q] [drive:]

Đường dẫn RD [/ S] [/ Q] [drive:]

/ S Xóa tất cả các thư mục và tệp trong thư mục được chỉ định ngoài thư mục đó. Được sử dụng để loại bỏ một cây thư mục.

/ Q Chế độ im lặng, không hỏi có ổn không khi xóa cây thư mục bằng / S

Nếu bạn đang sử dụng PowerShell, bạn có thể sử dụng Remove-Item(được lấy bí danh là del, erase, rd, ri, rmrmdir) và mất một -Recurselập luận cho rằng có thể thiếu để-r

rd -r "path"

84
Thật đáng để chỉ ra rằng đối với số lượng lớn tệp, rmdir / s / q thường nhanh hơn đáng kể so với thao tác "chọn dir, shift + xóa" tương đương trong trình thám hiểm.
Nêm

9
Điều này không xóa các tệp, như rm -rf, và nó cũng trả về giá trị khác không khi thư mục không tồn tại, do đó rd /s /q foo && echo "yay"sẽ thất bại nếu thư mục "foo" không tồn tại.
Dirk Groeneveld

17
Điều gì nếu dir. không trống và một số tập tin có được Access is deniedvà những người khác The process cannot access the file because it is being used by another process?
Eugene

6
Tôi vừa thử điều này trong bảy và bạn cần phải làm / S và / Q (mũ)
ford

2
Bí ẩn ở đây. Tôi biết rằng tôi đã thử lệnh này và nó không hoạt động nếu có các tệp trong cây thư mục; bây giờ tôi trở lại và . . kỳ diệu là nó có vẻ hiệu quả Có ai khác trải nghiệm hành vi không nhất quán với điều này?!
Alex Hall

139

quản trị viên:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Hoạt động cho mọi thứ kể cả các tệp sys

EDIT: Tôi thực sự đã tìm ra cách tốt nhất cũng giải quyết vấn đề đường dẫn tệp quá dài:

mkdir \empty
robocopy /mir \empty folder

3
Anh hùng của tôi! Và một mẹo: Bạn tạo thư mục trống của mình tại C: \ trống, sau đó một lần trong mỗi thư mục điên, người ta có thể làmrobocopy /mir c:\empty .
Léon Pelletier

Việc này takeownđã giúp tôi khi tôi sao chép thư mục từ hệ thống Linux bằng rsync và tôi không có đặc quyền để xóa thư mục đó ... Ngay cả bản sao lưu cũng không hoạt động. Cảm ơn
Jarda

1
Câu trả lời rất hay. Nó hoạt động. (tất cả các câu trả lời khác trên trang không). Nhưng cacls bị phản đối. Có thể làm cho một câu trả lời đương đại, xin vui lòng? Biến thể thứ hai đã hoạt động và không được dùng nữa.
Gangnus

Điều này không làm gì cho tôi. Ai đó có thể vui lòng giải thích làm thế nào nó được cho là làm việc? (robocopy) - Nó có thể xóa nội dung của các thư mục, nhưng không phải chính các thư mục
Ralf

114

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Xóa tất cả các thư mục và tệp trong thư mục được chỉ định ngoài thư mục đó. Được sử dụng để loại bỏ một cây thư mục.

  • /Q Chế độ im lặng, đừng hỏi có ổn không khi xóa cây thư mục với /S


13
Cảm ơn đã giải thích tham số. Thật không may, câu trả lời không được thực hiện.
Thomas

1
Câu trả lời đơn giản, hoàn hảo cho câu hỏi. Nên là người được chấp nhận.
Artif3x


19

Đi đến đường dẫn và kích hoạt lệnh này.

rd /s /q "FOLDER_NAME"

/ s: Xóa thư mục được chỉ định và tất cả các thư mục con bao gồm mọi tệp. Sử dụng / s để loại bỏ một cây.

/ q: Chạy rmdir ở chế độ im lặng. Xóa các thư mục mà không cần xác nhận.

/? : Hiển thị trợ giúp tại dấu nhắc lệnh.


9

Để xóa một thư mục (có tồn tại hay không), hãy sử dụng như sau:

if exist myfolder ( rmdir /s/q myfolder )


6

Câu trả lời được chấp nhận là rất tốt, nhưng giả sử bạn đã cài đặt Node, bạn có thể thực hiện việc này chính xác hơn nhiều với thư viện nút "rimraf", cho phép tạo các mẫu hình cầu. Nếu bạn sử dụng nó rất nhiều (tôi làm), chỉ cần cài đặt nó trên toàn cầu.

yarn global add rimraf

sau đó, ví dụ, một mẫu tôi sử dụng liên tục:

rimraf .\**\node_modules

hoặc cho một lớp lót cho phép bạn tránh cài đặt toàn cầu, nhưng sẽ mất một chút thời gian để tải xuống gói động:

npx rimraf .\**\node_modules

2
Một giải pháp vững chắc cho vấn đề này là hệ điều hành bất khả tri.
Denialos

5

Hãy thử lệnh này:

del /s foldername

làm việc cho tôi trong sự kết hợp w / rmdir / s / q vì một số tệp đã bị khóa và rmdir sẽ thất bại với những tệp đó. del / Foldername đã gỡ bỏ các tệp bị khóa mà sau đó cho phép rmdir thoát khỏi thư mục gốc. Đẹp.
bbqchickenrobot 18/03/2016


4

Trước tiên, hãy xem lại những gì rm -rf:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

Có ba kịch bản rm -rfthường được sử dụng ở nơi dự kiến ​​sẽ trả về 0:

  1. Đường dẫn được chỉ định không tồn tại.
  2. Đường dẫn đã chỉ định tồn tại và là một thư mục.
  3. Đường dẫn đã chỉ định tồn tại và là một tệp.

Tôi sẽ bỏ qua toàn bộ điều quyền, nhưng không ai sử dụng quyền hoặc cố gắng từ chối chính họ viết quyền truy cập vào mọi thứ trong Windows (OK, điều đó có nghĩa là một trò đùa đùa).

Đầu tiên được đặt ERRORLEVELthành 0 và sau đó xóa đường dẫn chỉ khi nó tồn tại, sử dụng các lệnh khác nhau tùy thuộc vào việc nó có phải là một thư mục hay không. IF EXISTkhông được đặt ERRORLEVELthành 0 nếu đường dẫn không tồn tại, do đó, đặt ERRORLEVELthành 0 trước là cần thiết để phát hiện đúng thành công theo cách bắt chước rm -rfsử dụng bình thường . Bảo vệ RDvới IF EXISTlà cần thiết bởi vì RD, không giống như rm -f, sẽ gây ra lỗi nếu mục tiêu không tồn tại.

Đoạn mã sau đây giả định rằng DELPATH được đặt trước. (Điều này an toàn khi bạn làm một cái gì đó như SET DELPATH=%1. Hãy thử đưa ECHO %1vào .cmdvà chuyển cho nó một đối số có khoảng trắng trong đó và xem điều gì xảy ra cho chính bạn). Sau khi đoạn mã hoàn thành, bạn có thể kiểm tra lỗi IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

Điểm là, mọi thứ đơn giản hơn khi môi trường chỉ phù hợp với POSIX. Hoặc nếu bạn cài đặt một MSYS tối thiểu và chỉ cần sử dụng nó.



3

Dưới đây là những gì bạn cần làm...

Tạo một tệp bó với dòng sau

RMDIR /S %1

Lưu tập tin lô của bạn như Remove.batvà đặt nó vàoC:\windows

Tạo khoá đăng ký sau

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Khởi chạy regeditvà cập nhật giá trị mặc định HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\default với giá trị sau

"c:\windows\REMOVE.bat" "%1"

Đó là nó! Bây giờ bạn có thể nhấp chuột phải vào bất kỳ thư mục nào và sử dụng chức năng RMDIR


3

Sử dụng Powershell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Thay thế nhật ký bằng tên thư mục bạn muốn xóa.

get-childitem tìm kiếm thư mục con với tên đệ quy từ đường dẫn hiện tại (.).

loại bỏ mục xóa kết quả.


2

Bạn có thể cài đặt GnuWin32 và sử dụng các lệnh * nix tự nhiên trên windows. Tôi cài đặt cái này trước khi cài đặt bất cứ thứ gì khác trên một bản sao mới của windows. :)


2

SỬ DỤNG CÓ NGUY CƠ CỦA RIÊNG BẠN. THÔNG TIN CUNG CẤP 'NHƯ VẬY'. KHÔNG KIỂM TRA TUYỆT VỜI.

Nhấp chuột phải vào biểu tượng Windows (thường ở dưới cùng bên trái)> nhấp vào "Windows PowerShell (Quản trị viên)"> sử dụng lệnh này (cẩn thận, bạn có thể dễ dàng xóa tất cả các tệp của mình nếu không cẩn thận):

rd -r -include *.* -force somedir

Thư somedirmục không trống bạn muốn xóa ở đâu.

Lưu ý rằng với các đĩa đính kèm bên ngoài hoặc các đĩa có vấn đề, đôi khi Windows hoạt động kỳ quặc - nó không có lỗi trong việc xóa (hoặc bất kỳ nỗ lực sao chép nào), nhưng thư mục không bị xóa (hoặc không được sao chép) theo hướng dẫn. (Tôi thấy rằng trong trường hợp này, ít nhất là đối với tôi, lệnh do @n_y đưa ra trong câu trả lời của anh ta sẽ tạo ra các lỗi như 'get-childitem: Tệp hoặc thư mục bị hỏng và không thể đọc được.' Kết quả là trong PowerShell)


1

LATE NHƯNG TRẢ LỜI QUAN TRỌNG cho bất cứ ai gặp khó khăn khi cài đặt các gói npm trên máy windows và nếu bạn thấy lỗi rm -rf..."không tìm thấy lệnh". Bạn có thể sử dụng bash cli để chạy lệnh rm trên windows.

Đối với người dùng npm, bạn có thể thay đổi cấu hình của npm npm config set script-shell "C:\Program Files\Git\bin\bash.exe"theo cách này nếu gói npm bạn đang cố cài đặt có tập lệnh cài đặt bài đăng sử dụng rm -rflệnh, bạn sẽ có thể chạy rmlệnh đó mà không cần thay đổi bất cứ điều gì trong gói npm hoặc vô hiệu hóa bài viết cài đặt script config. (Ví dụ: styled-componentssử dụng rmlệnh trong tập lệnh cài đặt bài đăng của họ)

Nếu bạn muốn chỉ sử dụng rm lệnh, bạn có thể dễ dàng sử dụng bash và truyền các đối số.

Vì vậy, có, bạn có thể sử dụng lệnh 'rm' trên windows.


0

đây là những gì làm việc cho tôi:

Chỉ cần thử giảm độ dài của đường dẫn. tức là :: Đổi tên tất cả các thư mục dẫn đến một tệp như vậy thành các tên nhỏ nhất có thể. Nói một chữ cái tên. Tiếp tục đổi tên lên trên trong hệ thống phân cấp thư mục. Bằng cách này, u có hiệu quả giảm chiều dài đường dẫn. Bây giờ cuối cùng hãy thử xóa tập tin ngay lập tức.



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.