Windowsでduコマンドっぽいスクリプトを作った

widowsにはdu(directory usage?)がない。リソースキットをインストールすればdiruse.exeとか入るみたいだけどこの程度の作業にいちいちインストールとかめんどくさい。
TreeSizeFreeは便利だが結果をデータに落とせない。

仕方がないからvbscriptで作ってみた。

du.vbs

Dim argumentCount
argumentCount = WScript.Arguments.Count

If argumentCount = 0 Then
	usage
	WScript.Quit 0
End If

Dim filespec
filespec = WScript.Arguments.Item(argumentCount - 1)

Dim maxDepth
maxDepth = 100
If WScript.Arguments.Named.Exists("max-depth") Then
	maxDepth = CLng(WScript.Arguments.Named.Item("max-depth"))
End If

Dim ignoreHidden
If WScript.Arguments.Named.Exists("ignore-hidden") Then
	ignoreHidden = True
Else
	ignoreHidden = False
End If



Dim fileSystem
Set fileSystem = CreateObject("Scripting.FileSystemObject")


Dim f
Set f = fileSystem.GetFolder(filespec)

ShowFolderSize f,0

Function ShowFolderSize(folder,depth)

	Dim subFolders
	Dim subFolder
	If depth < maxDepth Then
		Set subFolders = folder.SubFolders
		For Each subFolder in subFolders
			walk subFolder,depth + 1
		Next
	End If

	WScript.Echo FormatNumber(folder.Size) & vbTab & folder.Path
End Function
Function walk(folder,depth)
	If ignoreHidden Then
		If folder.attributes and 2 Then
			Exit Function
		End If
		If InStr(folder.Name,".") > 0 Then
			Exit Function
		End If
	End If
	ShowFolderSize folder,depth
End Function

Function usage()
	WScript.Echo "usage: cscript du.vbs [/max-depth:n] [/ignore-hidden] dir"
End Function

/max-depth:1 とすると指定ディレクトリ直下まで表示。
/ignore-hidden をつけるとWindowsの隠しディレクトリと"ドットディレクトリ"を無視する。
cscriptで起動するのでロゴが出てうざい、とか言う場合はcscriptのオプションで消すとかする。