2009-08-07 07:00:33 +0000 2009-08-07 07:00:33 +0000
142
142

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

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

回答 (14)

180
180
180
2011-05-27 11:27:41 +0000

警告:ディレクトリにシンボリックリンクがある場合、del はシンボリックリンクではなく実際のディレクトリを削除します。


私は定期的にWinXPの暗号化されたドライブから大量のファイルやディレクトリを削除する必要がありますが、通常は約22GBの50万ファイルを45,000フォルダにまとめて削除します。

Windowsエクスプローラでの削除は、ファイルを列挙するのに多くの時間を無駄にしてしまうので、非常につまらないものです。いつもは削除したいものを C:\stufftodelete に移動して、deletestuff.bat のバッチファイルを rmdir /s/q C:\stufftodelete にしている。これは夜に実行する予定だが、日中に実行することもあるので、早い方がいい。

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

メソッド1では、1回のパスでファイルとディレクトリ構造を削除しています。

rmdir /s/q foldername

メソッド2では、1回目のパスでファイルを削除し、1つのファイルごとにスクリーンへの書き込みのオーバーヘッドを避けるために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個のファイルを404MB使用した別のテスト結果です。

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

1回のテストで判断するには近すぎます。

編集: もっと多くのデータで再テストしましたが、これは私の典型的なケースです。

  • 方法1: 2時間15分、2時間34分: 平均。2時間25分
  • メソッド2: 49m, 57m: 平均。53分

うわー、方法2は方法1の3倍近く速くなってますね! deletestuff.batを更新します!

18
18
18
2011-10-31 06:37:53 +0000

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

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

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

9
9
9
2009-08-07 07:07:04 +0000

In command prompt (Start -> Run - Run> cmd):

del /f /s /q foldername
7
7
7
2011-05-25 14:00:51 +0000

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

同じインストーラでx64版がインストールされていますが、使用するには手動で強制的にインストールしなければなりません。

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

6
6
6
2012-02-09 17:35:24 +0000

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

@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つのステップで動作します。もう一つは、ファイルの所有権を取得しようとすることです。yはお住まいの地域に応じて変更する必要があります(英語ではyesの略)。タスクに失敗した場合(例えば、許可のために失敗した場合)、あなたはそれを再度実行する必要があります。しかし、第二ラウンドは、最初のラウンドで削除されたファイルを削除しようとしませんので、それはかなり速くなる可能性があります。


使い方。delfolder.batとしてパスルート(例えばc:\windows)に保存して、

delfolder "foldername"

として実行してください。イェーイ!

4
4
4
2011-12-23 15:47:15 +0000

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

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
3
3
3
2009-08-07 07:09:35 +0000

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

2
2
2
2009-10-06 21:59:15 +0000

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

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

1
1
1
2009-10-06 23:45:48 +0000

Cygwin ](http://cygwin.com)をインストールして、_rm -r_を使う。しかし、それはやりすぎかもしれません。

1
1
1
2011-05-31 12:40:36 +0000

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

0
0
0
2017-12-13 19:46:11 +0000

Hugo ](https://superuser.com/questions/19762/mass-deleting-files-in-windows/289399#289399)の答えが一番速いのですが、最初のパスでは隠しファイルやシステムファイルを削除しませんので、より完全な解決策が必要な場合は/aパラメータを使用してください。

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

Magallanes によるBATファイルについて、takeownとicaclsには十分注意してください。

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

ln.exe --enum foldername > HardlinksList.txt
0
0
0
2010-04-03 16:30:58 +0000

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

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

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

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

0
0
0
2017-06-15 12:00:52 +0000

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

上記の2つの方法は非常に効果的だと思われますが、全く同じ条件でベンチングしない限り、性能を判断するのは難しいでしょう。

  • 物理的なハードドライブのデバイスとモデル
  • できればATTO/Crystal Diskのベンチマークを行ってからデータを複製する
  • 同じパーティション/ボリュームの位置と形状
  • サンプルのパーティション/フォルダをデフラグして、全く同じタイプのハードドライブとして複製する
  • その後、バッチファイルを使って設定を実行し、Powershell Cmdletを使ってログを取ってパフォーマンスを測定する

  • サンプルのパーティション/フォルダをデフラグして、全く同じタイプのハードドライブとして複製する

  • その後、バッチファイルを使って設定を実行し、Powershell Cmdletを使ってパフォーマンスを測定する。

  • 以下は、私が実験してみたものの、決定的なパフォーマンスや結果を得ることができなかったいくつかのサンプルフォルダ(合計サイズとして名前が付けられています)です。

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • 出力されたログファイルを掲載したかったのですが、フォルダファイルのサイズや分布などにより、大きなばらつきがあると思います。

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
-1
-1
-1
2009-08-07 07:13:28 +0000

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

なので、コマンドプロンプトではなくマウスを使いたい場合は、ディレクトリを作成してそこにファイルを移動し、削除することができます(おっしゃる通りShift+Delで)。