はじめに
PowerShell を利用して、指定したフォルダ配下の各フォルダサイズを取得してみました。
PowerShell v6.0.2 を利用しています。
コード
#====================================================================
# 指定したディレクトリに含まれるすべてのディレクトリサイズをCSV出力
#====================================================================
# 調べたいフォルダパス
$searchPath = "c:\tools"
# 結果CSVファイルの出力パス
$outputCsvPath = "c:\temp\result.csv"
# 指定したディレクトリパスを起点として、下層のディレクトリのみを再帰的に取得
$dirArray = Get-ChildItem $searchPath -recurse | Where-Object {$_.PSisContainer}
# 取得したディレクトリに対する繰り返し結果(カスタムオブジェクト)を配列に格納
[array]$fileArray = foreach ($dir in $dirArray)
{
# ディレクトリに含まれるファイルの合計サイズを取得
$subItems = (Get-ChildItem $dir.FullName | Select-Object Length | Measure-Object Length -sum)
# ファイルのフルパス、合計サイズMB、作成日、更新日、アクセス日を持つカスタムオブジェクトを生成
[PSCustomObject]@{
Fullname=$dir.FullName
MB=[decimal]("{0:N2}" -f ($subItems.Sum / 1MB))
CreationTime=$dir.CreationTime
LastWriteTime=$dir.LastWriteTime
LastAccessTime=$dir.LastAccessTime
}
}
# 合計サイズ降順でソートし、フルパスと合計サイズをCSVファイルに出力
$fileArray | Sort-Object MB -Descending | Select-Object Fullname,MB,CreationTime,LastWriteTime,LastAccessTime | Export-Csv $outputCsvPath -notype -encoding Default
さいごに
このような処理を実現する場合はフォルダを舐めまわすしかないのかしら。
効率の良い処理方法があれば教えてほしいです。