Điều gì đã từng xảy ra với deltree và sự thay thế của nó là gì?


81

Trong các phiên bản trước của MS-DOS - tôi muốn nói là phiên bản 7, nhưng tôi có thể nhầm - có một deltreelệnh, lệnh này xóa đệ quy tất cả các thư mục con và tệp khỏi một đường dẫn nhất định.

deltreekhông còn tồn tại, nhưng deldường như không kế thừa khả năng xóa cây. del /sxóa tệp, nhưng không xóa thư mục.

Làm cách nào để bạn dễ dàng (tức là trong một lệnh) xóa một cây khỏi một tệp hàng loạt?


2
deltree đã được giới thiệu trong phiên bản 5.0 (Tôi vẫn nhớ niềm vui sướng khi có thể sử dụng nó) - Tôi cảm thấy già rồi.
Mark D

Câu trả lời:


90

Như những người khác đã đề cập, rdlệnh có công /stắc để loại bỏ đệ quy các thư mục con. Bạn có thể kết hợp nó với công /qtắc để xóa cưỡng bức thư mục con (và nội dung của nó) mà không cần nhắc nhở

rd /s /q c:\foobar

Có gì mọi người đang mất tích là rdkhông một thay thế chính xác cho deltreenhư có vẻ ( gần như ) tất cả các trang được trả về bởi Googling cho windows deltreesẽ có bạn tin tưởng. Các deltreelệnh làm việc cho cả hai thư mục và các tập tin , làm cho nó một thuận lợi, tất cả các mục đích xóa lệnh duy nhất. Cả hai điều sau đều hợp lệ:

deltree /y c:\foobar
deltree /y c:\baz.txt

Tuy nhiên rd(không có gì đáng ngạc nhiên) chỉ hoạt động cho các thư mục . Vì vậy, chỉ lệnh đầu tiên trong số các lệnh này là hợp lệ trong khi lệnh thứ hai đưa ra và báo lỗi và khiến tệp không bị xóa:

rd /s /q c:\foobar
rd /s /q c:\baz.txt

Hơn nữa, dellệnh chỉ hoạt động cho các tệp, không phải thư mục, vì vậy chỉ lệnh thứ hai hợp lệ trong khi lệnh đầu tiên báo lỗi:

del /f /q c:\foobar
del /f /q c:\baz.txt

Không có cách tích hợp nào để xóa tệp và thư mục như có thể được thực hiện với deltree. Sử dụng rdvà sử dụng delriêng lẻ là không thuận tiện vì nó yêu cầu phân biệt đối tượng hệ thống tệp (tên tệp / thư mục) là tệp hoặc thư mục, điều này không phải lúc nào cũng có thể thực hiện được hoặc thực tế.

Bạn có thể sao chép deltreelệnh từ hệ điều hành trước đó, tuy nhiên nó sẽ chỉ hoạt động trên các phiên bản Windows 32 bit vì đây là lệnh DOS 16 bit (ngay cả trong Windows 9x).

Một tùy chọn khác là tạo một tệp loạt gọi cả delrd; một cái gì đó như thế này:

::deltree.bat

@echo off
rd  %* 2> nul
del %* 2> nul

Bạn sẽ gọi nó như vậy:

deltree.bat /s /q /f c:\foobar
deltree.bat /s /q /f c:\baz.txt

Điều này gọi cả rddel, truyền các đối số và chuyển hướng đầu ra nulđể tránh lỗi mà một trong số chúng sẽ luôn phát ra.

Bạn có thể sẽ muốn tùy chỉnh hành vi để chứa hoặc đơn giản hóa các tham số hoặc cho phép thông báo lỗi, nhưng ngay cả như vậy, nó không phải là lý tưởng và không phải là sự thay thế trực tiếp cho deltree.

Một giải pháp thay thế là sử dụng công cụ của bên thứ ba, mặc dù việc tìm kiếm công cụ này là một bài tập thực sự trong việc tạo truy vấn-tìm kiếm.


2
@TobyAllen, "rm"? Ý bạn là rd ? Nếu vậy, bạn cần đọc lại văn bản trợ giúp; nó cho biết Loại bỏ tất cả các thư mục và tệp trong thư mục được chỉ định ngoài chính thư mục đó. Được sử dụng để loại bỏ một cây thư mục. Như tôi đã nói, nó không xóa các tập tin. Nếu bạn sử dụng nó như vậy: rd /s foobar.txt, nó sẽ nhắc bạn nếu bạn chắc chắn, và nếu bạn nói có (hoặc sử dụng /qcông tắc), sau đó nó mang lại cho các lỗiThe directory name is invalid.
Synetech

Bạn thực sự có thể xóa mọi thứ trong một thư mục (bao gồm cả các thư mục con của nó) với RMDIR /S, do đó, nói rằng không có cách nào để xóa cả tệp và thư mục trong một lần thực sự là không chính xác.
vapcguy

@vapcguy, rd /schỉ áp dụng cho thư mục, không áp dụng cho các tệp bên trong nó . Để xóa các tập tin trong đó, bạn phải sử dụng rdtrên chính thư mục đó. Ví dụ, bạn không thể nói rd c:\target\foobar.txt, bạn phải sử dụng rd /s c:\target, nhưng bạn có thể không muốn xóa chính thư mục, chỉ xóa nội dung của nó. deltreecó thể làm điều đó, nhưng rd /skhông thể, rd /scũng xóa chính thư mục.
Synetech

Chú ý tôi đã nói RMDIR /S- không phải rd /s. Nhưng ngay cả với rd, nếu thư mục đã biến mất, làm thế nào các tệp không bị xóa? Ngay cả khi chúng không phải là tệp, các tệp này hoàn toàn không có và nên được hệ thống thu thập. Và ngay cả khi điều đó không xảy ra, nó chắc chắn vẫn xảy ra nếu bạn tạo lại thư mục - bạn không nhận được danh sách các tệp của mình một cách kỳ diệu. Con trỏ về cơ bản đã bị loại bỏ. Vì vậy, bạn đang nói rằng bạn sẽ không bao giờ lấy lại dung lượng đó, bởi vì bạn không bao giờ có thể xóa những tệp đó, một lần nữa, nếu bạn sử dụng rd /s? Không chắc tôi sẽ tin điều đó-đó sẽ là một lỗi khủng khiếp. Điểm là xóa tệp & dir.
vapcguy

Nếu bạn tạo một thư mục trong "Tài liệu" thư mục của bạn được gọi là "thử nghiệm", tạo một tài liệu văn bản thử nghiệm có trong Windows, sau đó đóng cửa sổ Explorer, đi đến một dòng lệnh, cd Documents, rd /s test, thư mục của bạn và tập tin văn bản của bạn sẽ bị xóa. rmdir /s testcũng hoạt động. Bạn KHÔNG BAO GIỜ cố gắng sử dụng rd /s C:\Users\me\Documents\test\test.txt- điều đó sẽ hoàn toàn ngu ngốc. Nhưng bạn CÓ THỂ và NÊN sử dụng lệnh trên thư mục, chỉ là không trên tên tệp. Nhưng bằng cách xóa thư mục, bạn có thể xóa các tệp.
vapcguy

43

Nó được thay thế bằng các lệnh: RMDIR hoặc RD

Xóa tất cả các thư mục con bằng / S

Sử dụng nó một cách nhẹ nhàng với / Q

Thí dụ:

RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete

Tài liệu:


3
"RMDIR / S / Q. \" Xóa hiệu quả thư mục hiện tại và mọi thứ bên dưới nó. Có, nó phàn nàn về việc không thể xóa thư mục hiện tại, điều này có thể hữu ích. Chỉ cần đảm bảo rằng bạn đang ở đúng thư mục khi chạy nó! :)
Mmm

9

Cảm thấy nhớ nhung, tôi đã viết deltree.exe của riêng mình. Nó hoạt động với cả thư mục và tệp, đồng thời sử dụng SHFileOperation () để tăng tốc độ.

https://github.com/ai7/toolbox/tree/master/deltree

deltree v1.01 [Mar 27 2015, 16:31:02] (gcc 4.9.1)

Usage: deltree [options] <path> ...

Options:
  -y    yes, suppresses prompting for confirmation
  -s    silent, do not display any progress dialog
  -n    do nothing, simulate the operation
  -f    force, no prompting/silent (for rm compatibility)
  -r    ignored (for rm compatibility)

Delete directories and all the subdirectories and files in it.

Nó cần các ký tự đại diện và bạn có thể sử dụng nó như unix rm:

deltree -rf *


5

Ngày nay, bạn có thể sử dụng Powershell để thực hiện tác vụ tương tự:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"

Thật không may, PowerShell bị cồng kềnh và chậm. : - \ Tôi ghét điều đó khi các công ty cố ép người dùng "nâng cấp" lên bản rác mới nhất của họ. 😒
Synetech

4
$ help rd
Loại bỏ (xóa) một thư mục.

RMDIR [/ S] [/ Q] [drive:] đường dẫn
Đường dẫn [/ 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 chính nó. Được sử dụng để xóa một thư mục
            cây.

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

2

Trên thực tế, các lệnh RMDIR và RD trong hệ điều hành Windows hiện đại hợp nhất cả hai lệnh RD và Deltree của Win 98 trong một lệnh duy nhất. Đó là một lệnh nội bộ, đó là lý do tại sao bạn sẽ không tìm thấy bất kỳ RD.exe và RMDIR.exe nào.

Bằng cách gõ "RD /?" trong cmd mà không có qoutes gấp đôi, bạn sẽ nhận được chính xác những gì bạn muốn.


0

để xóa một thư mục và tất cả nội dung của nó một cách đệ quy

rd /s MY_DOOMED_DIR


0

Xóa tất cả các tệp và thư mục con

cd /d Directory && rd /s /q .\

Câu trả lời của bạn dường như trùng lặp với các câu trả lời khác (một số câu trả lời là 10 tuổi). Tôi không thể thấy bất kỳ lời giải thích nào nhiều hơn hoặc tốt hơn hoặc bất kỳ lợi thế nào khác
jeb

1
@jeb, thực ra không phải vậy. Nó hơi khác một chút, và sự khác biệt nhỏ đó là rất quan trọng và làm cho nó vượt trội hơn. 👍😉
Synetech
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.