Windowsで空のフォルダーを自動的に削除する方法

時間の経過とともに、何百もの空のフォルダやジャンクファイルがハードディスクを占有する可能性があります。 ジャンクファイルはディスク領域を占有し、ディスククリーンアップまたはストレージ設定を使用してクリーンアップできますが、空のディレクトリは残ります。

空のフォルダーはディスク領域を占有しませんが、データをよりよく整理するために、時々それらを整理することをお勧めします。

この記事では、コンピュータ上の空のフォルダを見つけて削除するさまざまな方法について説明します。

Windowsで空のフォルダーを見つけて削除する方法は?

空のフォルダまたはディレクトリは、ファイルまたはサブディレクトリが含まれていないものです。 空のフォルダーはディスク容量を消費しませんが、フォルダーが多すぎると煩わしい場合があります。 それらを見つけて削除するには、以下のいずれかの方法を使用します。

重要:自動化ツールまたはバッチファイルを実行して、システムドライブ全体の空のフォルダーを再帰的に削除することは、通常はお勧めできません。 これは、一部のプログラムが動作しない場合があり、必須のフォルダーが見つからない場合に奇妙なエラーをスローする場合があるためです。 いつものように、標準の警告が適用されます。 ファイルシステムまたはWindowsレジストリを操作する前に、できれば外付けドライブに適切なバックアップがあることを確認してください。

関連: Windowsのフォルダーで0バイトのファイルを再帰的に検索して削除する

まず、きちんとしたGUIツールから始めて、ネイティブのコマンドラインとスクリプトメソッドを続けます。

1.「Find Empty Files-n-Folders」ユーティリティを使用して空のフォルダーを削除します

空のファイルを検索-n-フォルダーは、空のファイル(0バイト)と空のフォルダーをフォルダーツリーの下で再帰的に検索および削除できる優れたツールです。

Ashisoft.comからFind Empty Files-n-Folders(600KBインストーラー)をダウンロードします。

フォルダを選択し、[今すぐスキャン]をクリックします。

このツールは、空のファイルとフォルダーを個別のタブに一覧表示します。

[ すべてのフォルダマーク ]をクリックし、 [フォルダを削除 ]をクリックします。

同様に、選択したフォルダーツリーで0バイトのファイルを削除するには、[ 空のファイル ]タブをクリックします。

Ashisoft.comには、チェックできる他の素晴らしいツールがあります!


2.「for」および「rd」コマンドを使用して空のフォルダを削除します

およびrdのコマンドプロンプト内部コマンドfor使用して、フォルダーのリストを列挙し、空のフォルダーを削除できます。

  1. Shiftキーを押したままフォルダーを右クリックし、[ ここでコマンドウィンドウを開く ]をクリックします。これにより、現在のフォルダーの場所にコマンドプロンプトが開き、コンソールで確認することもできます。 注:空のサブフォルダーを見つけて削除する必要がある正確な親フォルダーパスから次のコマンドを実行していることを確認する必要があります。
  2. コマンドプロンプトで目的のディレクトリに移動したら、次のコマンドラインを実行します。
     / f "delims ="%i in( 'dir / s / b / ad ^ | sort / r')の場合、rd "%i" 2> NUL 

    これにより、ネストされた空のフォルダを含む、サブフォルダ全体のすべての空のディレクトリがベースフォルダパスから削除されます。

上記のコマンドラインは、MicrosoftのRaymond Chenのブログ、The Old New Thingから提供されています。 この投稿では、Raymondのコマンドラインが若干変更されているため、スペースを含むフォルダー名も削除されます。

コマンドはどのように機能しますか

上記のコマンドは、現在のベースパス内のすべてのサブディレクトリを(再帰的に)リストし、リストを逆順にsort /rsort /r )します。 逆順の並べ替えは、列挙がボトムアップで行われるようにすることです。 親を削除する前にサブディレクトリを削除する必要があるため、これは空のディレクトリを削除するために重要です。

次に、 RDコマンドを使用して(逆のソート順で)ディレクトリのリストを削除しようとします。 ディレクトリが空でない場合は、次のディレクトリに進みます。 2>NULコマンドは、「ディレクトリが空ではない」という出力テキストが抑制されるようにします。

上記の方法の唯一の欠点は、空のフォルダを削除せずに検索するだけでは役に立たないことです。 空のフォルダのリストを検索するには、以下の段落のコマンドラインを使用するか、この記事で説明されている他の方法に従ってください。

空のフォルダを見つけるが、削除しない

削除せずに空のフォルダーのみを検索するには、次のコマンドライン構文を使用します。

 / r "D:\ uploads \ 2019" / d%F in(。)do @dir / b "%F"の場合| findstr "^"> nul || エコー%〜fF 

空のディレクトリのリストを含む出力が表示されます。

次のような空のネストされたフォルダがあるとします。

 C:\ 1└───2└────3└────4 

上記のコマンドを実行すると、最も深い空のフォルダーのみがリストされます→ 4 。 技術的には、サブフォルダーまたはファイルがその中に存在する場合、フォルダーは空であると見なすことができないため、それは正しいです。


3. Robocopyコマンドを使用して空のフォルダーを見つけて削除する

Robocopyは、多くの高度な機能を備えた強力な組み込みファイルコピーツールです。 Robocopyについては、記事「Windowsの2つのフォルダーの内容を比較する」で取り上げました。

いくつかのサブフォルダーが含まれているいくつかのサブフォルダーを含む、 carsという名前のフォルダーがあるとします。 Robocopyを使用して空のものを削除します。

ここでの秘訣は、Robocopy moveコマンドを使用して、ソースと宛先の両方にまったく同じフォルダーパスを渡すことです。

  1. コマンドプロンプトウィンドウを開く
  2. 次のコマンドを入力してEnterキーを押します。
     robocopy "d:\ automobile Rates \ cars" "d:\ automobile Rates \ cars" / S / move 

    ここで注意すべき最も重要なことは、 ソースパスと宛先パスが(意図的に)同じであることです。 /Sパラメーターは、空のフォルダーを「宛先」パスに移動しないようにRobocopyに指示します。 コピー元とコピー先のパスが同じであることを説明したので、Robocopyは/Sスイッチがあるため、空のフォルダを削除するだけです。

選択したパスの空のフォルダーが消去されます。

空のフォルダを見つけたいが削除はしたくないですか?

/L (リストのみ)コマンドライン引数をRobocopyで使用して、実際のコピー/移動操作を実行する代わりに、予行演習のみを実行することができます。

/L ::リストのみ–ファイルのコピー、タイムスタンプ、削除は行わないでください。

/MOVE ::ファイルとディレクトリを移動します(コピー後にソースから削除します)。

/S ::サブディレクトリをコピーしますが、空のものはコピーしません。

フォルダーのパスを聞くと、列にファイルの数を確認できます。 0は、それらのフォルダーにファイルがないことを意味します。

このコマンドを実際にテストしてみましょう!

私の%APPDATA%フォルダは、古いプログラムによって追加された空のフォルダでいっぱいです。

クリーンアップの前は、フォルダーのプロパティに表示されるように、 Appdata \ Roamingフォルダーには681個のフォルダーがありました。

コマンドプロンプトを開き、次のコマンドを実行しました。

 robocopy "%appdata%" "%appdata%" / S / MOVE 

注:%appdata%環境変数はC:\Users\{username}\AppData\Roamingフォルダーに変換されます。 Robocopyでは、フルフォルダーパスまたは同等の環境変数を使用できます。 どちらでもかまいません。

%APPDATA%フォルダーとサブフォルダー内の94個の空のフォルダーを正常に削除しました。

編集者注:統計セクションの下のコマンドライン出力で、次のエラーが表示されました:

「エラー32(0x00000020)ソースディレクトリの削除C:\ Users \ ramesh \ AppData \ Roaming \

別のプロセスによって使用されているため、プロセスはファイルにアクセスできません。」

Robocopyに%APPDATA%ディレクトリを移動( /MOVE )するように指示したので、ツールは「ソース」フォルダーを宛先に「移動」した後、それをクリーンアップしようとしました。 %APPDATA%は特別なフォルダーであるため、できませんでした。 特別なフォルダではないディレクトリパスを使用しても、エラーは発生しません。 すべてがうまくいったので、私は(些細な)エラーを単に無視しました。


4. PowerShellを使用して空のフォルダーを見つけて削除する

次のPowerShellコマンドラインは、指定された基本フォルダーの下にある空のフォルダーを再帰的に削除します。

  1. PowerShellを起動し、次のコマンドを入力します。
     (gci "folderpath" -r |?{$ _。PSIsContainer -eq $ True})| ?{$ _。GetFileSystemInfos()。Count -eq 0} | 削除アイテム 

    「folderpath」をベースフォルダーの場所に置き換えます。 たとえば、ここではローミングフォルダーを指定しています。

     (gci "C:\ Users \ ramesh \ AppData \ Roaming" -r |?{$ _。PSIsContainer -eq $ True})| ?{$ _。GetFileSystemInfos()。Count -eq 0} | 削除アイテム 

    これにより、 %appdata%フォルダーの下のすべての空のサブフォルダーが再帰的に削除され、エラーが発生しない限り、出力は表示されません。

上記のPowerShellコマンドは、ネストされた空のフォルダーの最後のレベルのみをクリアすることに注意してください。 たとえば、次のようなネストされた空のフォルダがあるとします。

 C:\ 1└───2└────3└────4 

上記のコマンドを実行すると、最も深いフォルダー→ 4クリアされます。 スクリプトを再度実行すると、ネストされたフォルダーの別のレベルがクリアされます( 3 )。

Svendsen Tech PowerShell WikiのPowerShellスクリプトを使用して、ネストされたフォルダーを操作できます。

または、次の方法であるWindowsスクリプトソリューションを使用して、ネストされたフォルダーを含むすべての空のフォルダーを再帰的にクリアすることもできます。

空のフォルダを見つけても、削除したくないですか?

空のフォルダのリストを取得したいが、それらを削除したくないですか? 代わりにこのコマンドラインの例を使用してください:

 (gci "C:\ Users \ ramesh \ AppData \ Roaming" -r |?{$ _。PSIsContainer -eq $ True})| ?{$ _。GetFileSystemInfos()。Count -eq 0} | フルネームを選択| Out-GridView 

このコマンドは、グリッドビューコントロールへの完全パスを持つ空のフォルダーのリストを出力します。

ヒント:グリッドビューでは、Ctrl + Cを押すことですべてを選択し、選択内容をコピーできます

フォルダを削除するコマンドを実行する前に、リストをプレビューすることをお勧めします。


5. Windowsスクリプトを使用して空のフォルダーを見つけて削除する

Microsoftの従業員Jeremy Jamesonは、空のフォルダーを再帰的に削除するVBScriptを作成しました。 スクリプトに行を追加して、空の読み取り専用ディレクトリを強制的に削除し、空のフォルダーの集約リストを出力します。 また、削除できなかった空のフォルダのリストと、対応するエラーの説明も出力します。

このスクリプトは、サブフォルダー間でネストされた空のディレクトリを削除できます。

 Option Explicit If(WScript.Arguments.Count 1)Then WScript.Echo( "Usage:cscript DeleteEmptyFolders.vbs {path}")WScript.Quit(1)End If Dim strPath:strPath = WScript.Arguments(0)Dim fso: fso = CreateObject( "Scripting.FileSystemObject")を設定します。ジャンクションなどにアクセスするとき。Forfolder.SubFolders DeleteEmptyFolders subfolderのサブフォルダーごとにNext On Error Goto 0 If folder.SubFolders.Count = 0 And folder.Files.Count = 0 Then sFolderPath = folder.Path On Error Resume Next fso.DeleteFolder folder .Path、True If Err.number 0 Then sDelErr = sDelErr&Err.number& ":"&Err.description&_ vbCrLf&sFolderPath&vbCrLf&vbCrLf Else sDelList = sDelList&vbCrLf&sFolderPath iCn t = iCnt + 1エラーの場合は終了エラー終了0の場合終了サブの場合sDelList = "" And sDelErr = "" Then WScript.Echo ""&_ "" "の下に空のフォルダーが見つかりません&strPath&" "" " & "tree" WScript.Quit End If If sDelList "" then sDelList = "List of empty folders of deleted"&vbCrLf _&String(38、 "-")&vbCrLf&sDelList&vbCrLf&_ vbCrLf& "合計:"& iCnt& "フォルダが削除されました。" sDelErr ""の場合、sDelErr = "これらのフォルダは削除できませんでした"&_ vbCrLf&String(45、 "-")&vbCrLf&sDelErr WScript.Echo sDelList&vbCrLf&vbCrLf&sDelErr 

上記のコードをメモ帳にコピーし、 .vbs拡張子を付けてファイルを保存します(たとえば、 delempty.vbs)

次の2つの方法でスクリプトを実行できます。

コマンドプロンプトを使用して、次を実行します。

 cscript.exe delempty.vbs "folder_path" 

GUIを使用して、以下を実行します。

 wscript.exe delempty.vbs "folder_path" 

送信メニューから

SendToフォルダーにスクリプトへのショートカットを作成し、「 空のフォルダーの削除」という名前を付けることができます。

次に、空のサブフォルダーを再帰的に削除するフォルダーを右クリックし、[ 送信 ]をクリックします。次に、[ 送信 ]メニューの[空のフォルダーの削除 ]をクリックします。

削除された空のフォルダーのリストと合計、および削除できなかったフォルダーが表示され、それぞれのエラーコードが表示されます。

それでおしまい! Windowsで空のフォルダーを削除する他の方法を知っている場合は、以下のコメントセクションでそれを知らせてください。

関連記事