LoginSignup
2
6

More than 5 years have passed since last update.

PowerShellで指定したフォルダ配下の各フォルダサイズを取得してみる

Posted at

はじめに

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

さいごに

このような処理を実現する場合はフォルダを舐めまわすしかないのかしら。
効率の良い処理方法があれば教えてほしいです。

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6