ディレクトリ内のファイルの個数と総バイト数を調べる

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

セミコロンを乱発して一行にしても、それはワンライナーとは言えないですね...