2008-12-03 33 views
63

Trong các phiên bản trước của MS-DOS - Tôi muốn nói phiên bản 7, nhưng tôi có thể sai - có một lệnh deltree, đã đệ quy xóa tất cả các thư mục con và tệp khỏi một đường dẫn nhất định.Điều gì đã từng xảy ra với deltree và sự thay thế của nó là gì?

deltree không còn tồn tại, nhưng del dường như không kế thừa khả năng xóa cây. del /s xóa các tệp, chứ không xóa các thư mục.

Làm thế 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 tin thực thi?

+0

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ó) - Người đàn ông tôi cảm thấy già. –

Trả lời

66

Như những người khác đã đề cập, lệnh rd có công tắc /s để đệ quy xóa các thư mục con. Bạn có thể kết hợp nó với các /q chuyển sang buộc xóa một thư mục con (và nội dung của nó) mà không nhắc như vậy

rd /s /q c:\foobar 

tất cả mọi người gì là mất tích là rdkhông một thay thế chính xác cho deltree như có vẻ (almost) mỗi trang được trả lại bởi Googling cho số windows deltree sẽ khiến bạn tin tưởng. Lệnh deltree làm việc cho cả hai thư mục và các tệp, làm cho nó trở thành một lệnh xóa thuận tiện, đa mục đích duy nhất. Đó là tất cả những điều sau đây là hợp lệ:

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

Tuy nhiên rd (không đáng ngạc nhiên) chỉ hoạt động cho thư mục.Như vậy chỉ là người đầu tiên của các lệnh này có giá trị trong khi thứ hai mang đến cho và sai và lá file un-xóa:

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

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

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

không có cách nào tích hợp để xóa các tập tin và thư mục như có thể được thực hiện với deltree. Sử dụng rddel riêng lẻ là bất tiện nhất 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 không phải lúc nào cũng có thể hoặc thực tế.

Bạn có thể sao chép lệnh deltree 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 tin thực thi gọi cả hai 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ó là như vậy:

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

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

Bạn có thể muốn tùy chỉnh hành vi để chứa hoặc đơn giản hóa thông 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 thay thế trực tiếp cho deltree.

Cách khác là lấy công cụ của bên thứ ba, mặc dù việc tìm kiếm một công cụ là một bài tập thực sự trong tìm kiếm-truy vấn-crafting.

+1

@TobyAllen, “rm”? Ý bạn là * rd *? Nếu vậy, bạn cần phải đọc lại văn bản trợ giúp; nó nói * Loại bỏ tất cả các thư mục và tập tin ** trong thư mục được chỉ định ** ngoài chính thư mục đó. Được sử dụng để xóa cây thư mục. * Như tôi đã nói, nó không xóa tệp. 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'/q' switch), thì nó sẽ đưa ra lỗi 'Tên thư mục không có hiệu lực.' – Synetech

+0

Bạn thực sự có thể xóa mọi thứ trong thư mục (bao gồm thư mục con của nó) bằng' RMDIR/S', vì vậy, 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

4
rmdir /s /q directory 
4
$ help rd 
Removes (deletes) a directory. 

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

    /S  Removes all directories and files in the specified directory 
      in addition to the directory itself. Used to remove a directory 
      tree. 

    /Q  Quiet mode, do not ask if ok to remove a directory tree with /S 
2

Trên thực tế rmdir và RD lệnh trong hệ điều hành Windows hiện đại kết hợp cả các 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.

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

6

Cảm thấy hoài cổ, tôi đã viết deltree.exe của riêng mình. Nó hoạt động với cả hai thư mục và tập tin, và sử dụng SHFileOperation() cho 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. 

Phải mất ký tự đại diện và bạn có thể sử dụng nó như unix rm:

deltree -rf * 
0

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

rd /s MY_DOOMED_DIR 
2

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" 
Các vấn đề liên quan