PowerShellを用い、ディレクトリ単位でファイル容量を出力する方法を以下に記します。本資料では、簡単なサンプルを公開しています。
ディレクトリ(フォルダ)単位でファイル容量の合計を出力する参考サイト記事関連記事ディレクトリ内のファイル合計サイズを出力するFunctionで実現・Get-DirTotalFileSize()実行してみるCSVにしてみる以下のスクリプトは、現在いるカレントディレクトリ内にあるフォルダを対象とし、そのフォルダ内にあるファイル容量の合計値を取得します。
$o = @()Get-ChildItem . | Where-Object PSisContainer | %{ $PATH=$_; Get-ChildItem -Force -Recurse $_ | Measure-Object -Sum Length } | %{ $o += ([PSCustomObject]@{ PATH=$PATH.FullName; SUM=$_.Sum })}$o上記のスクリプトを起動すると以下のように出力されます。尚、カレントディレクトリ(.)上にある、ファイルは対象外となります。以下の例では、C:/Windows/Microsoft.NET を対象にファイルサイズを取得しました。
PS C:/> cd C:/Windows/Microsoft.NETPS C:/Windows/Microsoft.NET> $o = @()PS C:/Windows/Microsoft.NET> Get-ChildItem . | Where-Object PSisContainer | %{ $PATH=$_; Get-ChildItem -Force -Recurse $_ | Measure-Object -Sum Length } | %{ $o += ([PSCustomObject]@{ PATH=$PATH.FullName; SUM=$_.Sum })}PS C:/Windows/Microsoft.NET> $oPATH SUM---- ---C:/Windows/Microsoft.NET/assembly 168640526C:/Windows/Microsoft.NET/Framework 263581306C:/Windows/Microsoft.NET/Framework64 551896484ディレクトリ構造を確認します。バグ発見です!以下のスクリーンショットの通り、4つのフォルダがあるのに、authmanが表示されていません。調べてみると、Get-ChildItemで指定したフォルダ内にファイルが1つもないとnullを返却しており、後方の処理に渡らない事が判明しました。
↑
Functionで実現・Get-DirTotalFileSize() †
if else を使うとパイプラインがうまく動作しなかったので、以下のように関数にしました。 以下のように関数として作成しました。
func.ps1
Function Get-DirTotalFileSize() { if ($args.Length -ne 1) { $Host.UI.WriteErrorLine("Usage: Get-DirectorySize <path>") return } $pathto = $args[0] if (!(Test-Path -PathType Container $pathto)) { $Host.UI.WriteErrorLine("Cannot access $pathto : No such directory") return } $o = @() $dirs = Get-ChildItem $pathto | Where-Object PSisContainer $dirs | % { $PATH=$_; if ((Get-ChildItem $_.FullName).Length -ne 0) { $measure = Get-ChildItem -Force -Recurse $_.FullName | Measure-Object -Sum Length $o += [PSCustomObject]@{ PATH=$PATH.FullName; SUM=$measure.Sum } } else { $o += [PSCustomObject]@{ PATH=$PATH.FullName; SUM=0 } } } $o}↑実行してみる †
上記のスクリプトをダウンロードするか、テキストエディタに貼り付け保存してください。尚、拡張子はps1にしてください。以下の例は、デスクトップに保存し使用した例です。面倒であれば、上記スクリプトをPowerShellのコンソールに貼り付けてもOKです。
スクリプトの取込みdotににより、スクリプトを取込みます。(linuxなどのshellと同じですね。). PS C:/> . C:/Users/sakura/Desktop/func.ps1エラー処理およびディレクトリを指定して実行PS C:/> Get-DirTotalFileSizeUsage: Get-DirectorySize <path>PS C:/> Get-DirTotalFileSize hogeCannot access hoge : No such directoryPS C:/> Get-DirTotalFileSize C:/Windows/Microsoft.NETPATH SUM---- ---C:/Windows/Microsoft.NET/assembly 168640526C:/Windows/Microsoft.NET/authman 0C:/Windows/Microsoft.NET/Framework 263581306C:/Windows/Microsoft.NET/Framework64 551896484ファイル合計値が正しいか確認 エクスプローラで1つ確認し、値が正しいか確認しました。↑
CSVにしてみる †
上記の関数により、ファイルサイズ一覧が取得できたので、CSVにしてみます。
PS C:/> $d = Get-DirTotalFileSize C:/Windows/Microsoft.NETPS C:/> $d | Export-Csv -NoTypeInformation -Encoding Default list.csvPS C:/> notepad.exe ./list.csvcsv出力されているのが確認できます。
以上、PowerShellでディレクトリ内のファイル総合計容量を確認する方法でした。
新闻热点
疑难解答