以前のバージョンのMS-DOSでは、バージョン7と言いたいのですが、間違っている可能性があります。特定のパスからすべてのサブディレクトリとファイルを再帰的に削除するdeltree
コマンドがありました。
deltree
はもう存在しませんが、del
はツリーを削除する機能を継承していないようです。 del /s
はファイルを削除しますが、フォルダーは削除しません。
バッチファイルからツリーを簡単に(つまり、1つのコマンドで)削除するにはどうすればよいですか?
他の人が述べたように、rd
コマンドには、サブディレクトリを再帰的に削除する/s
スイッチがあります。 /q
スイッチと組み合わせて、サブディレクトリ(およびその内容)を強制的に削除することができます。
rd /s /q c:\foobar
誰もが欠けているのは、rd
がではないdeltree
の正確な置換であるように見える( almost ) windows 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
で実行できるような、ファイルやディレクトリを削除する組み込みの方法はありません。 rd
とdel
を個別に使用するのは、ファイルシステムオブジェクト(ファイル/フォルダ名)が常に可能または実用的ではないファイルまたはディレクトリであるかどうかを区別する必要があるため、せいぜい不便です。
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
にリダイレクトして、どちらかが常に出力するエラーを回避します。
おそらく、パラメーターを調整または単純化するか、エラーメッセージを許可するように動作をカスタマイズする必要がありますが、それでも理想的ではなく、deltree
を直接置き換えるものではありません。
代替手段は、サードパーティ製のツールを入手することですが、検索ツールを見つけることは実際の検索クエリ作成です。
次のコマンドに置き換えられました:RMDIRまたはRD
/ Sを使用してすべてのサブディレクトリを削除します
/ Qで静かに使用する
例:
RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete
ドキュメンテーション:
懐かしい気持ちで、私は自分で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 *
rmdir /s /q directory
現在、Powershellを使用して同じタスクを実行できます。
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
$ help rd ディレクトリを削除(削除)します。 RMDIR [/ S] [/ Q] [drive:] path RD [/ S] [/Q] [drive:] path /Sディレクトリ自体に加えて、指定されたディレクトリ 内のすべてのディレクトリとファイルを削除します。ディレクトリ ツリーの削除に使用します。 /Q Quietモード、/ S を使用してディレクトリツリーを削除してもよいかどうかを尋ねません。
実際、最新のWindowsオペレーティングシステムのRMDIRおよびRDコマンドは、単一のコマンドでWin 98のコマンドRDとDeltreeの両方をマージします。これは内部コマンドであるため、RD.exeおよびRMDIR.exeが見つかりません。
「RD /?」と入力することにより二重qoutesなしのcmdでは、まさにあなたが望むものを得るでしょう。
これを使って:
cd (your directory here)
del *.* /f /s /q
ディレクトリとそのすべてのコンテンツを再帰的に削除するには
rd /s MY_DOOMED_DIR