Windows の特定のフォルダ配下にあるサブフォルダの中で…一体どのフォルダがディスク容量を食っているのか?(占有しているのか?)を疑問に思うことがあります。そんな場合に VBScript で簡単な *.vbs ファイルを作成し、そのフォルダを特定できると便利な場合があります。
※ファイルエクスプローラで並べ替えができるのは、特定のフォルダ直下のファイル/フォルダのみになりますので、簡単に実現できないのです、、
そんなサンプルプログラムをご紹介いたします。
目次
FileSystemObject
GetFolder 関数
FileSystemObject オブジェクトを生成し、その中の GetFolder メソッドを実行すると、そのフォルダ配下のサブフォルダ情報をフォルダオブジェクトとして取得することができます。
このフォルダオブジェクトは For Each を使って一つずつサブフォルダ情報を参照することができます。
例えば “c:\hogehoge\” 配下のサブフォルダを取得するサンプルプログラムは、こんな感じになります…
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("c:\hogehoge\")
For Each objSubFolder in objFolder.SubFolders
(処理A)
Next
Set objFolder = Nothing
Set objFSO = Nothing
このサンプルプログラムで、4行目に取得したサブフォルダの中に “.” と “..” が含まれますが、これらは特殊なフォルダなので除外することにします。
その他のフォルダは一般的なフォルダと思われますので、その配下にあるフォルダを取得するために再度 GetFolder() したい訳ですが…その取得結果の配下のフォルダもさらに…と繰り返し処理しなければなりません。こうした処理を「再帰検索」と呼ぶのですが、今回は この「再帰検索」を使ったプログラムに対応していく必要があります。
再帰検索
上記のサンプルプログラムを “getDir” という関数にして、取得結果のディレクトリ内をさらに “getDir”(再帰検索)するサンプルプログラムは こんな感じになります…
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
Windows で実行する
このサンプルプログラムを “*.vbs” としてファイルに保存し、ダブルクリックして実行すると1行目で指定した “c:\hogehoge\” 等の配下のサブフォルダ一覧を 10行目の MsgBox 関数で画面表示させることができます。
【注意】一つ一つのフォルダに対してメッセージボックスが表示されますので “c:\” などを指定して実行しないように気を付けてください。
[…] 別の記事「Windows のフォルダ構成を画面表示する VBScript サンプル」でご紹介しましたように、特定のフォルダ配下のサブフォルダをすべて取得するには、以下の再帰検索を使ったプログラムで取得可能です。 […]