Windowsでファイルを大量削除する

file-management windows

私は、Windows 2008サーバ上の特定のサブディレクトリに300万個以上のファイルを含むディレクトリを持っています。ルートディレクトリのSHIFT+DELで手動でファイルを削除するのは時間がかかります。もっと早く削除する方法はありませんか?

  146  None  2009-08-07


ベストアンサー

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


私は定期的にWinXPの暗号化されたドライブからたくさんのファイルやディレクトリを削除する必要があります

Windowsのエクスプローラで削除するのは、ファイルを列挙するのに時間を浪費するのでゴミだ。通常、削除したいものを C:\stufftodelete に移動して、rmdir /s/q C:\stufftodelete に deletestuff.bat のバッチファイルを作成している。これは夜に実行する予定だが、日中に実行する必要がある時もあるので、早い方がいい

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

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

rmdir /s/q foldername

方法2では、1回目のパスでファイルを削除してnulに出力し、1つのファイルごとにスクリーンへの書き込みのオーバーヘッドを回避します。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ファイルのうち404MBを使用した別のテスト結果がこちらです

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

だから中にはあまり入っていないし、おそらく一回のテストで判断するには近すぎます


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

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

うわー、方法2は方法1よりも3倍近く速い!deletestuff.batを更新します!

187  Hugo  2011-05-27


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

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

ここで Z: は ‘揮発性’ パーティションです。注意: パーティションにはラベルを付けてはいけません。このことについては こちら にブログを書きました

18  Mr. Bungle  2011-10-31


コマンドプロンプトで(Start -> Run -> cmd)

del /f /s /q foldername

10  lmsasu  2009-08-07


独自の API を使って)高速にファイルをコピー/移動できることに加えて、TeraCopy はファイルを削除することができ、それもまた高速です。TeraCopy を知って以来、TeraCopy がインストールされていないパソコンは使わないようにしています(コピー/移動/削除する場合)

同じインストーラでx64版をインストールしますが、使用するには手動で強制的にインストールする必要があります

安定版よりもおすすめのベータ版。http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

7  rautamiekka  2011-05-25


同じことをするバットファイルをやってみました

@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つは、ファイルを削除しようとします。yはあなたのローカルに応じて変更する必要があります(英語ではyesのスタンド)。タスクに失敗した場合(例えば、許可のために失敗した場合)、あなたはそれを再度実行する必要があります。しかし、第二ラウンドは、最初のラウンドで削除されたファイルを削除しようとはしませんので、それはかなり迅速である可能性があります


使い方は以下の通りです。delfolder.bat としてパスルート(例えば c:\windows)に保存してから、次のように実行してください

 delfolder "foldername"

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

私のテストでは、123,000個のファイルを削除するのに3分かかりました(SATA 7200rpm)。やったー

6  magallanes  2012-02-09


以下のコードを使用すると、通常はうまく動作します

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

4  Benoit  2011-12-23


コマンドプロンプトから rd /s コマンド を使用してください

3  JP Alioto  2009-08-07


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

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

2  Ryan C. Thompson  2009-10-06


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

1  CarlF  2009-10-06


ショートファイル名の生成を有効にしていますか?もしそうなら、本当に必要なのでしょうか?ファイルを削除するのは、メタデータを表示するだけです。そのため、削除する名前の数が2倍になってしまうと、作業量が大幅に増えてしまいます

1  MSalters  2011-05-31


この2つのアプリのどちらかを試してみましたか?

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

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

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

0  Stephen Kellett  2010-04-03


これは、先に述べた回答の中で行われたステップを補完するために提供されています

上記の2つの方法は非常に効果的なように見えますが、パフォーマンスを決定するのは、全く同じ条件でベンチされていない限り難しいでしょう

  • 物理ハードドライブのデバイスとモデル
    • 好ましくは、ATTO/Crystal Diskのデータをクローニングする前にベンチマークを行いました
  • 同じパーティション/ボリュームの位置と形状
    • これを行う方法は、サンプルのパーティション/フォルダをデフラグして、2つの全く同じタイプのハードドライブ(前のステップから)と全く同じようにクローンを作成することです
  • その後、バッチファイルを介して設定を実行し、Powershell Cmdlet を使用してパフォーマンスを記録して測定します

    • 理想的には、類似の活動の再帰性によるキャッシングの偏りを防ぐために、いくつかのメカニズムを追加します
  • 以下は、実験してみたものの、決定的な性能/結果が得られなかったサンプルフォルダ(合計サイズという名前)です

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • 出力されたLogファイルを掲載していたのですが、フォルダファイルのサイズや分布などでばらつきが大きいと思います

Powershell:

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

0  community wiki  2017-06-15


Hugoからの回答が最速ですが、最初のパスで隠しファイルやシステムファイルを削除しないので、より完全な解決策が必要な場合はパラメータ/aを使用してください

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

MagallanesによるBATファイルについて、takeownとicaclsには十分注意してください。ハードリンクは同じパーミッションと所有者を共有しているため、削除したいフォルダ内にunsaturated hardlinksがある場合、takeownとicaclsを使用するとフォルダ外のファイルのパーミッションと所有者が変更されます

ツール ln.exe を使用すると、フォルダ内でハードリンクされているすべてのファイルをリストアップし、それらがフォルダ外のファイル(不飽和ハードリンク)にハードリンクされているかどうかを知ることができます

ln.exe --enum foldername > HardlinksList.txt

0  liamZ  2017-12-13


複数のファイルを削除するよりも、フォルダを削除した方が早いです

だから、あなたがコマンドプロンプトの代わりにマウスを使用することを好む場合は、ディレクトリを作成し、そこにファイルを移動し、それを削除することができます(あなたが言ったようにShift+Delで)

-1  danijelk  2009-08-07


タイトルとURLをコピーしました