递归地确定文件夹中所有扩展的COUNT和SUM



我希望能够选择一个远程文件夹并递归扫描它的所有文件扩展名。对于发现的每个扩展名,我需要一个总数,以及单个文件类型的总和。

我在这里找到了一个使用-include开关的脚本,该脚本适用于单个文件扩展名,但与其多次运行该脚本,不如只运行一次并收集所有扩展名。

$hostname=hostname
$directory = "D:foo"
$FolderItems = Get-ChildItem $directory -recurse -Include *.txt
$Measurement = $FolderItems | Measure-Object -property length -sum
$colitems = $FolderItems | measure-Object -property length -sum
"$hostname;{0:N2}" -f ($colitems.sum / 1MB) + "MB;" + $Measurement.count + " files;"

我想我需要使用Get-ChildItem $directory | Group-Object -Property Extension以某种方式列出扩展,如果这有帮助的话。

理想的输出是这样的:
扩展,大小(MB),计数
jpg, 1.72,203
三、0.23,105
xlsx 156.12,456

我在Windows 7机器上使用Powershell v4.0远程连接到服务器,我可以在本地运行脚本,但它只有Win 2008 R2机器的V3.0。

有人有什么想法吗?

这是一种方法:

#Get all items
Get-ChildItem -Path $directory -Recurse |
#Get only files
Where-Object { !$_.PSIsContainer } |
#Group by extension
Group-Object Extension |
#Get data
Select-Object @{n="Extension";e={$_.Name -replace '^.'}}, @{n="Size (MB)";e={[math]::Round((($_.Group | Measure-Object Length -Sum).Sum / 1MB), 2)}}, Count
Extension Size (MB) Count
--------- --------- -----
mkv          164,03     1
xlsx           0,03     3
dll            0,32     5
lnk               0     1
url               0     1
txt               0     1

最新更新