Windowsでのファイルの一括削除


141

Windows 2008サーバー上の特定のサブディレクトリに最大300万個のファイルを含むディレクトリがあります。ルートディレクトリでShiftキーを押しながらDelキーを使用して手動でファイルを削除すると、時間がかかります。削除をより高速に行う他の方法はありますか?


1
また、スタックオーバーフローでここで質問:stackoverflow.com/questions/186737/…-
ヒューゴ

6
マグネットを一部のサブディレクトリのみにターゲットするにはどうすればよいですか?
ハイメHablutzel

7
本物のプログラマのように着実に手で@Jaime、... ;-) xkcd.com/378
Legionair

SSDドライブの場合はどうなりますか?
ベンジャミンヴァイス14

回答:


179

警告: ディレクトリへのシンボリックリンクがある場合、シンボリックリンクdelではなく実際のディレクトリを削除します。これには細心の注意を払い、ターゲットディレクトリ内にシンボリックリンクがないことがわかっている場合を除き、これらのコマンドを実行しないでください。


WinXPで暗号化されたドライブから多くのファイルとディレクトリを定期的に削除する必要があります。通常、45,000フォルダーにある500,000ファイルのうち約22 GBです。

Windowsエクスプローラーでの削除は、ファイルの列挙に多くの時間を浪費するため、ゴミです。私は通常、削除する必要があるものをC:\ stufftodeleteに移動し、deletestuff.batバッチファイルをに持っていますrmdir /s/q C:\stufftodelete。これは夜間に実行するようにスケジュールされていますが、日中に実行する必要がある場合があります。

これは、303個のフォルダーにある960個のファイルの5.85 MBの小さなサンプルのクイックタイムテストの結果です。方法1を実行してから方法2を実行し、テストディレクトリをリセットしました。

方法1は、ファイルとディレクトリ構造を1つのパスで削除します。

rmdir /s/q foldername

方法2には、ファイルを削除する最初のパスと、nulへの出力があり、単一ファイルごとに画面に書き込むオーバーヘッドを回避します。次に、2回目のパスで残りのディレクトリ構造をクリーンアップします。

del /f/s/q foldername > nul
rmdir /s/q foldername
  • 方法1:17.5 、14.9 、13.9 、14.8 、13.8 :平均14.98秒
  • 方法2:14.3 、12.1 、11.7 、14.2 、11.8 :平均12.82秒

3,243個のフォルダーにある19,521個のファイルのうち404 MBを使用した別のテストの結果を次に示します。

  • 方法1:2分20秒
  • 方法2:2分33秒

そのため、あまり多くはなく、おそらく1つのテストで判断するには近すぎます。


編集:私ははるかに多くのデータで再テストしましたが、これは私にとって典型的なケースです:146,918個のフォルダーにある2159 GBの1,159,211個のファイル:

  • 方法1:2時間15分、2時間34 :平均:2時間25分
  • 方法2:49m、57m:平均:53分

わあ、方法2は方法1のほぼ3倍高速です!deletestuff.batを更新します!


絶対パスを指定した場合、RD / S / Qは優れた機能を発揮しますが、相対パスを使用した場合は機能しません。解決策はありますか?
マイケルS.

1
@Hugo:Hugo、質問:上記の時間テストでは、どちらかまたは両方のメソッドについて、メソッドを実行する直前にファイルをカウントしましたか?フォルダーの内容が既にOSファイルキャッシュにある可能性があるため、私は尋ねています。ありがとう!
ウィリアムC

@WilliamC:正確には覚えていませんが、同じ内容の繰り返し削除については、1回の削除の直前にカウントし、他の削除については繰り返しません(既に数字を知っているので)。
ヒューゴ

1
256文字より長いパス名が含まれる場合、rmdirとdelの両方が失敗します。
ニコライエーマン

1
警告:ディレクトリへのシンボリックリンクがある場合、シンボリックリンクdelではなく実際のディレクトリを削除します。これには細心の注意を払い、ターゲットディレクトリ内にシンボリックリンクがないことがわかっている場合を除き、これらのコマンドを実行しないでください。
user0103

18

大きなディレクトリツリーを定期的に削除する必要がある場合は、そのディレクトリツリーのルートを別のパーティションに保存し、すべてを削除する必要があるときはいつでも簡単にフォーマットすることを検討してください。これを自動化する必要がある場合は、次のDOSコマンドを使用できます。

echo Y | format Z: /FS:NTFS /X /Q

Z:は「揮発性」パーティションです。注:パーティションにはラベルがない必要があります。ここでこれについてブログしまし


また、ハードリンクを使用して、正確なディレクトリパスが必要な場合にファイルが保存されるディスクとディレクトリの間に接続を作成します。
ニームクラウド

1
@NimeCloud:ハードリンクはファイルシステム間またはディレクトリ間をリンクできません。
grawity

5
ただし、シンボリックリンクファイルシステムとリンクディレクトリをまたぐことができるため、ここで適切な場合があります。mklinkコマンドを参照してください(Vista以降。それ以外の場合はMark Russinovich / SysInternalsのジャンクションを使用してください。)
ロバートカルホーン

9

コマンドプロンプトで(スタート->実行-> cmd):

del /f /s /q foldername 

これは、削除するものをリストするので素晴らしいですが、速度の点ではrdと同じです。
ボボボボ09

1
ああ、すごいすごい。思ったほど良くありません。ファイルはすぐに削除されますが、ディレクトリツリーはそのまま残ります。
ボボボボ09

1
私が追加するかもしれないことは、rdを使用してクリアするのにかなり長い時間がかかります。
ボボボボ09

3
@bobobobo私は〜30ギガバイト/ 1,000,000のファイル/フォルダ15,000とデル+ RDがちょうどRDよりも約3倍高速であるといくつかのテストでした:superuser.com/questions/19762/mass-deleting-files-in-windows/...
ヒューゴ

1
パス名が256文字より長い場合、これは失敗します。
ニコライエーマン

7

(独自のAPIを使用して)ファイルを非常に高速にコピー/移動することに加えて、TeraCopyはファイルを削除できます。これも非常に高速です。TeraCopyを見つけて以来、インストールされていないコンピューターは使用しません(コピー/移動/削除を行う場合)。

同じインストーラーがx64エディションをインストールしますが、それを使用するには手動で強制する必要があります。

安定版よりも推奨するベータ:http : //blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/


TeraCopyとrmdirまたはdelまたはdel + rmdirの似たような時間比較を行ったことや見たことはありますか?
ヒューゴ

1
@ヒューゴ:愚かな質問。TeraCopyが目に見えない場合は、TeraCopyをお勧めしません。
rautamiekka

5
それで、10%速いと推定しますか?2倍の速さ?10倍速い?百万倍高速ですか?2つの大きな同一のテストセットを使用してrmdirに対して時間を調整できると便利です。
ヒューゴ

1
ありがとうございました!私は何年もの間TeraCopyを使ってきましたが、一括削除機能については知りませんでした。そして、あなたは正しいです、それははるかに速いです!
アズデイトン

1
@Amalgovinusあなたはしません。プログラムを開き、ドラッグ/ドロップまたは右クリックでファイル/フォルダーを追加するか、エクスプローラー/デスクトップでファイル/フォルダーを右クリックします。一旦それらを歩いたら、「削除」と「ごみ箱に移動」をクリックするだけですが、「ディスクから削除」を好みます。ただし、デフォルトで実行されていない場合は、デスクトップ/エクスプローラーの右クリックで表示されるように設定するために、管理者としてTeraCopyを起動する必要があります。
ラウタミエッカ

6

同じことを行うbatファイルを作成しました。

@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T

2つのステップで作業を行い、1つはファイルを削除しようとします。2つ目は、ファイルの所有権を取得することです。 yはあなたの地域に応じて変更する必要があります(英語ではyesを表します)。タスクが失敗した場合(たとえば、許可のために失敗した場合)、再度実行する必要があります。ただし、2回目のラウンドでは、1回目のラウンドで削除されたファイルを削除しようとしないため、非常に高速です。


それを使用する方法。パスルート(たとえばc:\ windows)にdelfolder.batとして保存し、次のように実行します。

 delfolder "foldername"   

ここで、foldernameはフォルダーの名前です

私のテストでは、123'000個のファイルの削除に3分かかりました(sata 7200rpm)。わーい!


1
通常%1、スクリプトでは使用しないでください"%~1"。このように、引数が引用符で渡された場合、引用符を外して再引用します。引用符で渡されていない場合は、引用符で囲まれます。
ブノワ

4

通常、以下のコードを使用するとうまくいきます。

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe

そのrobocopy呼び出しの最後に `> nul`を追加して、画面上で表示する必要がないようにします。
JoshDM

rsyncLinuxでの使用に似ています。ここよりも速くなっていrmdirますか?
ハスター

参考までに、このロボコピーはdel /f/q/s+ とは大きく異なりrmdir /s/qます。dir_to_wipeにジャンクションがあるc:\some_important_dir場合、データを失うことになります。
パベルP

@Pavelは/ XJを使用して接合点とシンボリックリンクを除外しますか?
ベルンハルト

これは、256文字を超える数百のディレクトリとファイルが存在する〜36GBのディレクトリに対してトリックを行い、del / rmdir "メソッド"が惨めに失敗しました。これには数秒かかり、Windows Explorerは何時間も見積もっていました!

3

コマンドプロンプトからrd / sコマンドを使用します。


2
いいえ。これは、エクスプローラから削除するのと同じくらい遅いです。
ボボボボ09

まあ、大丈夫。とにかくdel / f / s / qよりもうまく動作します。
ボボボボ09

3
実は、これはExplorerを使用して削除するよりもはるかに優れています。それは(エクスプローラがチョークと中止している)、削除または2が失敗した場合でも、削除を続けて
bobobobo

2

最良の実用的な解決策は、おそらくフォルダーをどこか(ごみ箱など)に移動してから削除を開始することです。時間がかかりますが、少なくとも邪魔にならないでしょう。

これらすべてのファイルを削除するのに必要な時間は、タスクの固有の要件であり、削除の実装の非効率性ではないと確信しています。


1

Cygwinをインストールし、rm -rを使用します。しかし、それはやり過ぎだろう。


それはまったく同じrd /q /sです
ジョーイ

あまりにも多くのタスク、およびほぼ同等の速度!
adeelx

1
ここにある他のいくつかのinstall-tool-X-and-use-itの答えよりも悪くはありません。
JdeBP

2
cygwin rmはcmd.exe builtinと同じくらい高速rdですか?posixインターフェースのcygwinエミュレーションは、追加の作業を行う必要があるため、かなり遅いため、rm実際には高く評価されていません。
ジャン・ヒューデック

大量のファイルが削除されるのを待っている間に、Cygwinをインストールして試してみるのに十分な時間がありましたrm -rfdel /f/s/qCygwinではディスク使用量が50%しかなかったため、約10分で中断して元に戻りました。でdel、ディスク使用量は100%に固定されます。だから私はそれが速く削除する必要があると考えています。CPU使用率は両方の方法で1%未満です。計算に10分かかった後、Windows File Deleterを閉じたため、ファイル番号がわかりません。
デレクツィンバ

1

短いファイル名の生成が有効になっていますか?もしそうなら、本当に必要ですか?ファイルの削除は、メタデータの操作にすぎません。したがって、削除する名前の数が2倍であれば、作業量は大幅に増加します。


0

これら2つのアプリのいずれかを試しましたか?

最速のパフォーマンスが必要な場合は、上書き回数を0に設定してください。これを行うには、オプションをクリックしてから、ダイアログの下部にある値を変更します。

[ソース]フィールドに削除するパスを入力し、[削除]をクリックします。

これらのアプリは、ごみ箱にファイルを入れません。注意して使用してください。


0

これは、前述の回答で行われた手順を補完および強化するために提供されています。

上記の2つの方法は非常に効果的と思われますが、まったく同じ条件に反していない限り、パフォーマンスを判断することは困難です。

  • 物理ハードドライブデバイスとモデル
    • データのクローンを作成する前に、ATTO / Crystal Diskのベンチマークを行うことが望ましい
  • 同じパーティション/ボリュームの場所とジオメトリ
    • これを行う方法は、サンプルパーティション/フォルダーをデフラグし、それらがまったく同じタイプのハードドライブであるようにクローンを作成することです(前のステップから)
  • 次に、バッチファイルを使用して構成を実行し、Powershell Cmdletを使用してパフォーマンスをログに記録して測定します。

    • 理想的には、同様のアクティビティの最新性によるキャッシュバイアスを防止するメカニズムを追加します。
  • 以下は、試してみたが最終的なパフォーマンス/結果を得ることができなかったいくつかのサンプルフォルダー(合計サイズ)です。

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • 出力ログファイルを投稿しましたが、フォルダーファイルのサイズや分布などのために分散が大きいと思います。

パワーシェル:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt

> 256文字の名前で失敗

0

Hugoからの回答は最速ですが、最初のパスで隠しファイルまたはシステムファイルを削除しません。したがって、より完全なソリューションが必要な場合は、パラメーター/ aを使用します。

del /f /s /q /a foldername > nul
rmdir /s /q foldername

MagallanesのBATファイルについては、takeownとicaclsに非常に注意してください。ハードリンクは同じ許可と所有者を共有するため、削除するフォルダーに不飽和ハードリンクがある場合、takeownとicaclsを使用すると、外部のファイルの許可と所有者が変更されますフォルダ。

ツールln.exeを使用すると、フォルダー内にハードリンクされたすべてのファイルを一覧表示し、フォルダー外のファイルにハードリンクされているかどうかを確認できます(不飽和ハードリンク)。

ln.exe --enum foldername > HardlinksList.txt

-1

フォルダの削除は、複数のファイルを削除するよりも高速です。

したがって、コマンドプロンプトの代わりにマウスを使用する場合は、ディレクトリを作成し、そこにファイルを移動して削除できます(前述のようにShift + Delを使用)。


2
ディレクトリは、ファイルが存在するパーティションと同じパーティションに作成する必要があります。これにより、移動アクションが瞬時に行われます。新しいフォルダーとファイルが別々のパーティションにある場合、コピー操作全体が長時間続きます。

5
フォルダーを削除すると、その中のファイルを削除するよりも速いという考えはどこで得られますか?フォルダを削除すると、すべてのファイルを削除するには、その最初のステップとして含まれている中で、そのフォルダ、それは速くすることはできません。ただし、ごみ箱への移動はまったく別の問題ですが、ここでは問題ではありません。
ジョーイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.