以前のバージョンのMS-DOS(バージョン7と言いたいのですが、間違っている可能性がdeltree
あります)には、指定されたパスからすべてのサブディレクトリとファイルを再帰的に削除するコマンドがありました。
deltree
もはや存在しませんが、del
ツリーを削除する機能を継承していないようです。del /s
ファイルは削除しますが、フォルダは削除しません。
バッチファイルからツリーを簡単に(つまり、1つのコマンドで)削除するにはどうすればよいですか?
以前のバージョンのMS-DOS(バージョン7と言いたいのですが、間違っている可能性がdeltree
あります)には、指定されたパスからすべてのサブディレクトリとファイルを再帰的に削除するコマンドがありました。
deltree
もはや存在しませんが、del
ツリーを削除する機能を継承していないようです。del /s
ファイルは削除しますが、フォルダは削除しません。
バッチファイルからツリーを簡単に(つまり、1つのコマンドで)削除するにはどうすればよいですか?
回答:
他の人が述べたように、rd
コマンドには/s
サブディレクトリを再帰的に削除するスイッチがあります。これを/q
スイッチと組み合わせると、プロンプトを表示せずにサブディレクトリ(およびその内容)を強制的に削除できます。
rd /s /q c:\foobar
誰もが見逃しているのrd
は、グーグルによって返されたすべてのページがあなたに信じさせられるように(ほぼ)完全に置き換えるものではないということです。このコマンドはディレクトリとファイルの両方で機能するため、1つの便利な汎用削除コマンドになります。つまり、次の両方が有効です。deltree
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
個別に使用することは、ファイルシステムオブジェクト(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
。
別の方法は、サードパーティのツールを入手することですが、それを見つけることは、検索クエリ作成の実際の演習です。
rd /s foobar.txt
、確かな場合はプロンプトが表示され、「はい」と言う(または/q
スイッチを使用する)と、エラーが発生しますThe directory name is invalid.
RMDIR /S
。したがって、ファイルとフォルダの両方を一度に削除する方法はありません。実際には正しくありません。
rd /s
、ディレクトリにのみ適用され、その中のファイルには適用されません。その中のファイルを削除するrd
には、ディレクトリ自体でを使用する必要があります。たとえば、rd c:\target\foobar.txt
を使用する必要rd /s c:\target
があるとは言えませんが、ディレクトリ自体を削除するのではなく、その内容だけを削除することもできます。deltree
それは可能ですが、ディレクトリ自体を削除するrd /s
ことrd /s
もできません。
RMDIR /S
-ではありませんrd /s
。しかしrd
、それでも、ディレクトリがなくなった場合、ファイルはどのように削除されないのでしょうか。そうでない場合でも、ファイルは事実上孤立しているため、システムによってガベージコレクションされる必要があります。そして、それが起こらなかったとしても、ディレクトリを再作成すれば確かに起こります-再び、魔法のようにファイルのリストを取得することはありません。ポインタは基本的に削除されます。つまり、使用した場合、これらのファイルを削除することはできないため、そのスペースを取り戻すことはできないと言っているのrd /s
でしょうか。私がそれを信じるかどうかはわかりません-それはひどいバグでしょう。ポイントは、ファイルとディレクトリを削除することです。
cd Documents
、rd /s test
、あなたのディレクトリとあなたのテキストファイルが削除されます。rmdir /s test
動作します。あなたは決して使おうとはしませんrd /s C:\Users\me\Documents\test\test.txt
-それは絶対に愚かでしょう。ただし、ファイル名ではなく、ディレクトリでコマンドを使用できます。使用する必要があります。ただし、ディレクトリを削除することで、ファイルを削除できます。
次のコマンドに置き換えられました: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.
ワイルドカードが必要で、unixrmのように使用できます。
deltree -rf *
現在、Powershellを使用して同じタスクを実行できます。
powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
実際、最新のWindowsオペレーティングシステムのRMDIRコマンドとRDコマンドは、Win98のRDコマンドとDeltreeコマンドの両方を1つのコマンドにマージします。これは内部コマンドであるため、RD.exeとRMDIR.exeは見つかりません。
この「RD /?」と入力すると 二重qoutesなしのcmdで、あなたはまさにあなたが望むものを手に入れるでしょう。
これを使って:
cd (your directory here)
del *.* /f /s /q
すべてのファイルとサブディレクトリを削除します
cd /d Directory && rd /s /q .\