使用PowerShell按大小分组文件

时间:2016-03-23 12:48:12

标签: powershell

我有一个目录,想要按大小分组(在一个地方复制它们)(分三组)

下式给出:

c:\temp\dir

a.txt 200kb
b.txt 220kb
c.txt 230kb
d.txt 250kb
e.txt 270kb
f.txt 280kb
g.txt 290kb
h.txt 310kb

我列出这些文件并通过简单地迭代它们将它们分成三个单独的组(现在我只是打印输出,但是让我们保持简单):

$dir = Get-ChildItem c:\temp\dir\*.*
$count = 0;
foreach( $file in $dir)
{
    if ($count -eq 0)
    {
        write-output "1) $file"
    }

    if ($count -eq 1)
    {
        write-output "2) $file"
    }

    if ($count -eq 2)
    {
        write-output "3) $file"
    }

    $count = $count + 1

    if ($count -gt 2){
        $count = 0
    }

}

我的问题是:如何按文件大小对列表进行排序?是否有办法告诉$dir = Get-ChildItem c:\temp\dir\*.*按文件大小排序?

3 个答案:

答案 0 :(得分:4)

使用Sort-Object根据属性进行排序:

$dir = Get-ChildItem c:\temp\dir\*.* | Sort-Object -Property "Length"

答案 1 :(得分:3)

易:

Get-ChildItem c:\temp\dir\*.* | Sort-Object -Property Length

如果你想要最大的第一个:

Get-ChildItem c:\temp\dir\*.* | Sort-Object -Property Length -Descending

答案 2 :(得分:1)

如果你想显示文件名+大小,按大小排序(我理解的是你想要的输出),你也可以使用select和format table ...

$source="c:\temp\"
set-location $source
cls
$source_regex = [regex]::escape($source)
Get-ChildItem $source -recurse | where {-not ($_.psiscontainer)} | `
select fullname, Length | Sort-Object -Property Length | ft -wrap

输出将是:

C:\temp\Microsoft.Data.Services.Client.dll                 659120
C:\temp\Microsoft.WindowsAzure.Storage.dll                 945288

...

希望这会有所帮助 最好的祝福 斯特凡