根据上次修改日期获取文件计数

时间:2014-02-26 18:59:02

标签: powershell

我正在寻找一些PowerShell脚本,我可以在其中获取目录中文件的计数,并提供如下的计数摘要:

Date                 Number of files             Size
26-Feb                  100                      100MB
25-Feb                  250                      12MB
24-Feb                  300                      97MB

基本上我想根据特定的最后修改日期获取计数并对它们进行分组。

我尝试了很多内容,包括来自cmd和PowerShell dir /A-D的{​​{1}},并尝试将这些内容进一步组合到管道并获得所需的输出但无法获得它。

2 个答案:

答案 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的方法慢一点。