スポンサーリンク

フォルダ毎のサイズを一覧するVBS

●やりたいこと
・指定フォルダ内にあるフォルダのサイズを一覧表示する。今回はテキストファイルを作ってそれをメモ帳で表示します。
・サブフォルダ内のフォルダまでは追いかけません。
・こんなことは「DISKINFO」とかのツールがあれば簡単にできるのだが、ソフトのダウンロードやインストールが許されない環境では自分で何とかするしかない。Windowsエクスプローラでフォルダ毎のサイズが一覧されればこんなことする必要もないんだが。頼みますよマイクロソフトさん!

●使い道
・ずっと同じPCで作業しているとフォルダのサイズが肥大化してくる。たまに大掃除するときに使用してます。大きなサイズのフォルダを優先的に整理整頓。

●使い方
①以下のソースをテキストに張り付けて「フォルダ毎のサイズ.vbs」として保存する。
②フォルダを「フォルダ毎のサイズ.vbs」にドラッグ&ドロップする。

●「C:\Program Files (x86)\Canon\」をこのVBSにドラッグ&ドロップした結果
以下のようにメモ帳で表示。数値はMB単位。
f:id:engineer-kiyo:20210906230105p:plain

CONST CFILE="c:\tmp\size.txt"      ' 出力ファイル。「c:\tmp」フォルダはあらかじめ作っておく。

Set arg = Wscript.Arguments
Set oWshShell = CreateObject("Wscript.Shell")
sl = ""

' パラメータが1個でない場合はエラーとする。
If (arg.Count <> 1) Then
    Wscript.echo "異常終了 理由:引数不正 引数1 :フオルダ名" & arg.Count
    Wscript.Quit -1
End if

sFolder = arg(0)

Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(sFolder)

' ファイル開く
Set objFile = objFSO.OpenTextFile(CFILE, 2, True)   ' 2は上書き、8は追記
Call GetFolderSize2(objFolder)

' ファイルクローズ
objFile.Close

'**********************
'* ノートパッドで表示 *
'**********************
oWshShell.Run "notepad " & CFILE
Wscript.Quit O


Sub GetSize(objFolder)
    sz = objFolder.Size      ' サイズを取得
    sl = objFolder.Path & vbtab & Int(sz / 1024 / 1024)         ' 単位をMBにしてパスと、サイズを変数へ

    '*******************
    '* ファイルを出力  *
    '*******************
    objFile.WriteLine(sl)    ' サブフオルダも出すようにするとここでエラーになる場合がある。行数が多くなりすぎるので
End Sub

Sub GetFolderSize2(objFolder)
    For Each objSubFolder In objFolder.SubFolders
        Call GetSize(objSubFolder)

        'GetFolderSize2(objSubFolder)   'これをアンコメントするとサブフオルダにも処理を実施する。 これがあるとエラーになる可能性が高い。
    Next
End Sub