ディレクトリ内のファイルの個数と総バイト数を調べる
Get-ChildItem で配列オブジェクトを取得して、その配列の要素数を調べればファイルの個数がわかります。配列要素には Length というメンバがあるので、その総和をとればファイルの総バイト数がわかります。
ファイルの個数を取得する
配列の要素数がファイル個数です。
$arr = Get-ChildItem
"number is {0}" -f $arr.Length
下記が実行結果です。
number is 95
ファイルの総バイト数を取得する
配列要素には Length というファイルのバイト数を示すメンバがあるので、その総和を ForEach ブロックの中で加算します。
$arr = Get-ChildItem
$sum = 0
ForEach ( $item in $arr )
{
$sum += $item.Length
}
"number is {0}" -f $arr.Length
"total {0} bytes" -f $sum
下記が実行結果です。
number is 95
total 111422112 bytes
ファイルの総バイト数を取得する(ワンライナー)
一度しか実行しない場合は先頭の $sum = 0; は不要です。しかし、何度も実行する場合、$sum = 0; を入れないと $sum の値は2倍、3倍、N倍に増えていきますので、いちおうゼロ初期化するのが安全だと思います。
PowerShell はセミコロンを使えば1行に複数のコマンドを記述することができます。
C:\tmp\rec> $sum = 0; Get-ChildItem | ForEach-Object { $sum += $_.Length }; Write-Host( $sum )
111422112
下記のようにカウンタ変数を用意すれば、ForEach 内部でファイル個数を数え上げることもできます。
C:\tmp\rec> $counter = 0; $sum = 0; Get-ChildItem | ForEach-Object { $counter++; $sum += $_.Length }; Write-Host( $counter, $sum )
95 111422112
セミコロンを乱発して一行にしても、それはワンライナーとは言えないですね...