使用Powershell,如何按日期

时间:2016-04-14 13:40:34

标签: powershell

使用Powershell,如何按日期排序计数文件列表

pchost_00364_20160412143516.dat
pchost_00364_20160412144751.dat
pchost_00364_20160412150333.dat
pchost_00364_20160412150452.dat
pchost_00364_20160412151127.dat
pchost_00364_20160412152939.dat
pchost_00364_20160412153029.dat
pchost_00364_20160412153101.dat
pchost_00364_20160412153135.dat
pchost_00364_20160412153215.dat
pchost_00364_20160412160907.dat
pchost_00906_20160412161546.dat
pchost_00907_20160412155312.dat
pchost_00907_20160412155357.dat
pchost_00910_20160412160949.dat
pchost_00916_20160412155545.dat
pchost_00918_20160412144047.dat
pchost_00918_20160412154908.dat
pchost_00940_20160412143732.dat
pchost_00940_20160412150611.dat
pchost_00940_20160412150622.dat
pchost_00940_20160412161126.dat
pchost_00941_20160412143016.dat
pchost_00941_20160412143731.dat
pchost_00941_20160412162005.dat
pchost_00942_20160412155547.dat
pchost_00943_20160412143032.dat
pchost_00943_20160412143200.dat
pchost_00943_20160412143617.dat
pchost_00943_20160412144010.dat
pchost_00943_20160412144704.dat
pchost_00943_20160412145532.dat
pchost_00943_20160412160138.dat
pchost_00951_20160412145544.dat
pchost_00951_20160412161626.dat
pchost_00962_20160412161609.dat
pchost_01529_20160412142948.dat
pchost_01529_20160412143749.dat
pchost_01529_20160412144658.dat
pchost_01529_20160412145010.dat
pchost_01529_20160412150214.dat
pchost_01529_20160412150630.dat
pchost_01529_20160412150848.dat
pchost_01529_20160412151925.dat
pchost_01529_20160412161840.dat
pchost_03494_20160412142929.dat
pchost_03494_20160412144528.dat
pchost_03494_20160412144718.dat
pchost_03494_20160412155340.dat
pchost_03499_20160412154603.dat
pchost_03964_20160412144550.dat
pchost_03964_20160412160336.dat
pchost_04152_20160412145420.dat
pchost_04872_20160412161618.dat

1 个答案:

答案 0 :(得分:1)

许多不同的方法。这是一个例子

$files = @'
pchost_03964_20160412160336.dat
pchost_04152_20160412145420.dat
'@ -split "`n"

$files | sort {$_.substring($_.lastindexof('_'))}

这是基于您的评论的另一种选择

$files = @'
name
pchost_03964_20160412160336.dat
pchost_04152_20160412145420.dat
'@ | ConvertFrom-Csv

$results = foreach ($file in $files) {
    $split = $file.name.Split('_ ')
    $date = $split[2].Substring(0, $split[2].IndexOf('.'))
    $year = $date.Substring(0, 4)
    $month = $date.Substring(4, 2)
    $day = $date.Substring(6, 2)
    $hour = $date.Substring(8, 2)
    $minute = $date.Substring(10, 2)
    $second = $date.Substring(12, 2)
    [pscustomobject]@{
        Name = $split[1]
        Date = "$year $month $day"
        HMS = "$hour$minute$second"
    }
}

$results | group name, date | % {
    $group = $_.group | sort date, hms -Descending | select -f 1
    $date = $group.date, $group.hms -join ' '
    [pscustomobject]@{
        Count = $_.Count
        Name = $group.name
        Date = $date
    }
} | sort date