web-dev-qa-db-ja.com

deltreeはどうなりましたか?

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

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

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

75
David Koelle

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

rd /s /q c:\foobar

誰もが欠けているのは、rdではないdeltreeの正確な置換であるように見える( almostwindows deltreeはあなたに信じさせるでしょう。 deltreeコマンドは、ディレクトリとファイルの両方で機能し、単一の便利な汎用削除コマンドになりました。つまり、次の両方が有効です。

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

deltreeで実行できるような、ファイルやディレクトリを削除する組み込みの方法はありません。 rddelを個別に使用するのは、ファイルシステムオブジェクト(ファイル/フォルダ名)が常に可能または実用的ではないファイルまたはディレクトリであるかどうかを区別する必要があるため、せいぜい不便です。

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

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

::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

これはrddelの両方を呼び出し、引数を渡し、出力をnulにリダイレクトして、どちらかが常に出力するエラーを回避します。

おそらく、パラメーターを調整または単純化するか、エラーメッセージを許可するように動作をカスタマイズする必要がありますが、それでも理想的ではなく、deltreeを直接置き換えるものではありません。

代替手段は、サードパーティ製のツールを入手することですが、検索ツールを見つけることは実際の検索クエリ作成です。

83
Synetech

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

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

/ Qで静かに使用する

例:

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

ドキュメンテーション:

41
Jeremiah

懐かしい気持ちで、私は自分で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.

ワイルドカードを使用し、unix rmのように使用できます。

deltree -rf *
6
raychi
rmdir /s /q directory
5
Jon Skeet

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

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
4
$ help rd 
ディレクトリを削除(削除)します。
 
 RMDIR [/ S] [/ Q] [drive:] path 
 RD [/ S] [/Q] [drive:] path 
 
/Sディレクトリ自体に加えて、指定されたディレクトリ
内のすべてのディレクトリとファイルを削除します。ディレクトリ
ツリーの削除に使用します。
 
/Q Quietモード、/ S 
を使用してディレクトリツリーを削除してもよいかどうかを尋ねません。
4
Ferruccio

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

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

2
Sohail xIN3N

これを使って:

cd (your directory here)
del *.* /f /s /q
0

ディレクトリとそのすべてのコンテンツを再帰的に削除するには

rd /s MY_DOOMED_DIR
0
Gregg