我正在寻找一些PowerShell脚本,我可以在其中获取目录中文件的计数,并提供如下的计数摘要:
Date Number of files Size
26-Feb 100 100MB
25-Feb 250 12MB
24-Feb 300 97MB
基本上我想根据特定的最后修改日期获取计数并对它们进行分组。
我尝试了很多内容,包括来自cmd和PowerShell dir /A-D
的{{1}},并尝试将这些内容进一步组合到管道并获得所需的输出但无法获得它。
答案 0 :(得分:2)
我确信这是一个组对象解决方案,但我个人更喜欢处理哈希表。 [PSCustomObject]类型加速器至少需要v3。如果它是V2,则需要更改为使用New-Object。
$count = @{}
$size = @{}
get-childitem *.txt |
foreach {
$date = $_.lastwritetime.tostring('dd-MMM')
$count[$date]++
$size[$date] += $_.length
}
$count.keys |
sort|
foreach {
[PSCustomObject]@{
Date = $_
'Number of files' = $Count[$_]
Size = $Size[$_]
}
} | format-table -AutoSize
答案 1 :(得分:2)
以下是使用Group-Object
$groups = get-childitem |select -Property FullName, length,@{Name="Updated";Expression={$_.lastwritetime.ToShortDateString()}}|group-object -property Updated;
foreach ($g in $groups) {
$groupsize = 0;
foreach ($item in $g.group) {
$groupsize += Get-item $item.FullName | Select-Object -ExpandProperty length;
}
$g| Add-Member -name "Size" -MemberType NoteProperty -Value $groupsize;
}
$groups|select @{Name="Date";Expression={$_.Name}},@{Name="Number of Files";Expression={$_.Count}},Size|sort-object -property "Date" | Format-Table -AutoSize;
在我的系统上,它似乎比@ mjolinor的方法慢一点。