デルツリーに何が起こったのか、そしてその代替品は何ですか?


81

以前のバージョンのMS-DOS(バージョン7と言いたいのですが、間違っている可能性がdeltreeあります)には、指定されたパスからすべてのサブディレクトリとファイルを再帰的に削除するコマンドがありました。

deltreeもはや存在しませんが、delツリーを削除する機能を継承していないようです。del /sファイルは削除しますが、フォルダは削除しません。

バッチファイルからツリーを簡単に(つまり、1つのコマンドで)削除するにはどうすればよいですか?


2
deltreeはバージョン5.0で導入されました(それを使用できることの喜びを今でも覚えています)-私は年をとっています。
マークD

回答:


90

他の人が述べたように、rdコマンドには/sサブディレクトリを再帰的に削除するスイッチがあります。これを/qスイッチと組み合わせると、プロンプトを表示せずにサブディレクトリ(およびその内容)を強制的に削除できます。

rd /s /q c:\foobar

誰もが見逃しているのrdは、グーグルによって返されたすべてのページがあなたに信じさせられるように(ほぼ)完全に置き換えるものではないということです。このコマンドはディレクトリとファイルの両方で機能するため、1つの便利な汎用削除コマンドになります。つまり、次の両方が有効です。deltreewindows deltreedeltree

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

ただし、rd(当然のことながら)ディレクトリに対してのみ機能します。そのため、これらのコマンドの最初のコマンドのみが有効であり、2番目のコマンドはエラーを発生させ、ファイルを削除せずに残します。

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

さらに、このdelコマンドはディレクトリではなくファイルに対してのみ機能するため、最初のコマンドでエラーが発生する間、2番目のコマンドのみが有効です。

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

で実行できるような、ファイルとディレクトリを削除する組み込みの方法はありませんdeltreerdおよびをdel個別に使用することは、ファイルシステムオブジェクト(file- / folder-name)が常に可能または実用的であるとは限らないファイルまたはディレクトリであるかどうかを区別する必要があるため、せいぜい不便です。

deltree以前のOSからコマンドをコピーできますが、16ビットのDOSコマンドであるため(Windows 9xでも)、32ビットバージョンのWindowsでのみ機能します。

別のオプションは、両方呼び出すバッチファイルを作成することであるdelとしますrd。このようなもの:

::deltree.bat

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

あなたはそれをそのように呼ぶでしょう:

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

これはとの両方rdを呼び出しdel、引数を渡し、出力をリダイレクトしてnul、それらの1つが常に発行するエラーを回避します。

パラメータを調整または簡略化するか、エラーメッセージを許可するように動作をカスタマイズすることをお勧めしますが、それでも理想的ではなく、の直接の代替ではありませんdeltree

別の方法は、サードパーティのツールを入手することですが、それを見つけることは、検索クエリ作成の実際の演習です。


2
@TobyAllen、「rm」?もしかして、RDの?その場合は、ヘルプテキストを読み直す必要があります。ディレクトリ自体に加えて、指定されたディレクトリ内のすべてのディレクトリとファイルを削除すると表示されますディレクトリツリーを削除するために使用されます。私が言ったように、それはファイルを削除しません。そのように使用する場合:rd /s foobar.txt、確かな場合はプロンプトが表示され、「はい」と言う(または/qスイッチを使用する)と、エラーが発生しますThe directory name is invalid.
Synetech

実際には、ディレクトリ(そのサブディレクトリを含む)の下にあるすべてのものをで削除できますRMDIR /S。したがって、ファイルとフォルダの両方を一度に削除する方法はありません。実際には正しくありません。
vapcguy 2017年

@vapcguyはrd /sディレクトリにのみ適用され、その中のファイルには適用されません。その中のファイルを削除するrdには、ディレクトリ自体でを使用する必要があります。たとえば、rd c:\target\foobar.txtを使用する必要rd /s c:\targetがあるとは言えませんが、ディレクトリ自体を削除するのではなく、その内容だけを削除することもできます。deltreeそれは可能ですが、ディレクトリ自体を削除するrd /sことrd /sもできません。
Synetech

私が言ったことに注意してくださいRMDIR /S-ではありませんrd /s。しかしrd、それでも、ディレクトリがなくなった場合、ファイルはどのように削除されないのでしょうか。そうでない場合でも、ファイルは事実上孤立しているため、システムによってガベージコレクションされる必要があります。そして、それが起こらなかったとしても、ディレクトリを再作成すれば確かに起こります-再び、魔法のようにファイルのリストを取得することはありません。ポインタは基本的に削除されます。つまり、使用した場合、これらのファイルを削除することはできないため、そのスペースを取り戻すことはできないと言っているのrd /sでしょうか。私がそれを信じるかどうかはわかりません-それはひどいバグでしょう。ポイントは、ファイルとディレクトリを削除することです。
vapcguy

あなたは、「テスト」と呼ばれるあなたの「ドキュメント」フォルダにディレクトリを作成する場合は、コマンドラインに行き、その後、近くのエクスプローラウィンドウ、Windowsであった試験テキストドキュメントを作成し、cd Documentsrd /s test、あなたのディレクトリとあなたのテキストファイルが削除されます。rmdir /s test動作します。あなたは決して使おうとはしませんrd /s C:\Users\me\Documents\test\test.txt-それは絶対に愚かでしょう。ただし、ファイル名ではなく、ディレクトリでコマンドを使用できます。使用する必要があります。ただし、ディレクトリを削除することで、ファイルを削除できます。
vapcguy

43

次のコマンドに置き換えられました:RMDIRまたはRD

/ Sを使用してすべてのサブディレクトリを削除します

/ Qで静かに使用してください

例:

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

ドキュメンテーション:


3
"RMDIR / S /Q。\"は、現在のディレクトリとその下のすべてを効果的に消去します。はい、現在のディレクトリを削除できないと文句を言います。これは便利です。実行するときは、正しいディレクトリにいることを確認してください。:)
うーん

9

懐かしく感じて、自分でdeltree.exeを書きました。ディレクトリとファイルの両方で機能し、速度を上げるためにSHFileOperation()を使用します。

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.

ワイルドカードが必要で、unixrmのように使用できます。

deltree -rf *


5

現在、Powershellを使用して同じタスクを実行できます。

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

残念ながら、PowerShellは肥大化していて低速です。:-\企業がユーザーに最新のジャンクに「アップグレード」させようとするとき、私はそれを嫌います。😒
Synetech20年

4
$ヘルプrd
ディレクトリを削除(削除)します。

RMDIR [/ S] [/ Q] [ドライブ:]パス
RD [/ S] [/ Q] [ドライブ:]パス

    / S指定されたディレクトリ内のすべてのディレクトリとファイルを削除します
            ディレクトリ自体に加えて。ディレクトリを削除するために使用されます
            木。

    / Qクワイエットモード、/ Sでディレクトリツリーを削除してもよいかどうか尋ねないでください

2

実際、最新のWindowsオペレーティングシステムのRMDIRコマンドとRDコマンドは、Win98のRDコマンドとDeltreeコマンドの両方を1つのコマンドにマージします。これは内部コマンドであるため、RD.exeとRMDIR.exeは見つかりません。

この「RD /?」と入力すると 二重qoutesなしのcmdで、あなたはまさにあなたが望むものを手に入れるでしょう。


0

ディレクトリとそのすべての内容を再帰的に削除します

rd /s MY_DOOMED_DIR


0

すべてのファイルとサブディレクトリを削除します

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

あなたの答えは他の答えと重複しているようです(10歳のものもあります)。私はこれ以上またはより良い説明や他の利点を見ることができません
jeb 2018年

1
@jeb、実際にはそうではありません。それはわずかに異なります、そしてそのわずかな違いは重要であり、それを優れたものにします。👍😉
Synetech20年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.