Dropbox を使っていると「Dropbox がもう少しでいっぱいです」メッセージが表示されることが度々ありますが、こんなときは 使ってないファイルを探し出して削除できれば…解決します。
ところが…Windows のファイルエクスプローラには、\Dropbox\ フォルダ配下の最もディスクを食っているサブフォルダを探す機能がありません、、(どのフォルダにゴミファイルがたまっているのかわかりません)
そこで 簡単な *.vbs プログラムを起動(作成)することで、ディスク容量を食っているサブフォルダを簡単に探し出す方法をご紹介いたします。
※プログラミングに興味のない方は 最後の「保存して実行する」のみお読み頂ければと思います。
※参考サイトは最下部にまとめております。
目次
Dropbox 配下の全サブフォルダを取得する
別記事「Windows のフォルダ構成を画面表示する VBScript サンプル」でご紹介しましたように、特定のフォルダ配下のサブフォルダをすべて取得するには、以下の再帰検索を使ったプログラムで取得可能です。
Call getDir("c:\hogehoge\")
Function getDir(strDir)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strDir)
For Each objSubFolder in objFolder.SubFolders
If objSubFolder.name <> "." And objSubFolder.name <> ".." Then
MsgBox strDir & objSubFolder.name & "\"
'再帰検索する
Call getDir(strDir & objSubFolder.name & "\")
End If
Next
Set objFolder = Nothing
Set objFSO = Nothing
End Function
簡単に解決しない理由
上記で取得したフォルダの各サイズを取得・比較すれば良いような気もしますが…フォルダオブジェクトの .size プロパティなどは(Windows のファイルエクスプローラの仕様も同じですが)そのフォルダ配下のすべてのファイルの合計サイズを取得する仕様になってます。つまり このプロパティを使って最大サイズのフォルダを検索すると「多くのサブフォルダを配下に持つフォルダが見つかるだけ」で、実際に使用済みファイルなどを特に保存しているようなフォルダが見つかる…訳ではないのです、、
むしろ、例えば ODAN からダウンロードしたサイズの大きい画像ファイルばかりを一時的に保存していた…ようなフォルダ…などを特定したいのです。。
という訳で、フォルダ内に直接 含まれるファイルサイズのみ合計・比較するようにコードを7行目付近に挿入すると、こんな感じになります…
(10行目の MsgBox も不要なので削除します)
Call getDir("c:\hogehoge\")
Function getDir(strDir)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strDir)
'フォルダ内のファイルのサイズのみ合計する
lngTotalFileSize = 0
For Each objFile in objFolder.Files
lngTotalFileSize = lngTotalFileSize + objFile.size
Next
For Each objSubFolder in objFolder.SubFolders
If objSubFolder.name <> "." And objSubFolder.name <> ".." Then
'再帰検索する
Call getDir(strDir & objSubFolder.name & "\")
End If
Next
Set objFolder = Nothing
Set objFSO = Nothing
End Function
最もサイズの大きいサブフォルダを特定する
上記のサンプルに「最もサイズの大きいサブフォルダ名を保存して、最後にファイルエクスプローラで開く」機能を追加します。また(”c:\hogehoge\” ではなく)その *.vbs ファイルを保存しているディレクトリ配下を検索することにすると、こんな感じになります…
'変数初期化
lngMaxFileSize = 0: strMaxDirName = ""
'vbs ファイル配下の最もサイズの大きいサブフォルダを取得する
getDir Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\"))
'エクスプローラで開く
Set objShell = CreateObject( "Shell.Application" )
objShell.Explore strMaxDirName
Set objShell = Nothing
Function getDir(strDir)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strDir)
'フォルダ内のファイルのサイズのみ合計する
lngTotalFileSize = 0
For Each objFile in objFolder.Files
lngTotalFileSize = lngTotalFileSize + objFile.size
Next
'最大のファイルサイズか判定する
If lngTotalFileSize > lngMaxFileSize Then
lngMaxFileSize = lngTotalFileSize
'フォルダ名を保存しておく
strMaxDirName = strDir
End If
For Each objSubFolder in objFolder.SubFolders
If objSubFolder.name <> "." And objSubFolder.name <> ".." Then
'再帰検索する
Call getDir(strDir & objSubFolder.name & "\")
End If
Next
Set objFolder = Nothing
Set objFSO = Nothing
End Function
保存して実行する
上記のサンプルプログラムを以下の通り保存して実行すると、(数秒後に)最もサイズの大きいサブフォルダがファイルエクスプローラで開かれますので、そちらのフォルダを整理整頓して頂ければ Dropbox のメッセージは表示されなくなると思います。
- 新規テキストファイルを開きます。
- 上記のサンプルプログラムを貼り付けます。
- “max-folder.vbs” などの名称で保存します。
- Dropbox のインストールフォルダに移動します。
- ダブルクリックして実行します。
参考サイト
Windows のフォルダ構成を画面表示する VBScript サンプル
https://blog.soln-sns.net/vbscript-sample-how-do-i-get-a-list-of-folders-in-a-specific-folder-in-windows/
VBScript(Wikipedia)
https://ja.wikipedia.org/wiki/VBScript