我有一个目录,想要按大小分组(在一个地方复制它们)(分三组)
下式给出:
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\*.*
按文件大小排序?
答案 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
...
希望这会有所帮助 最好的祝福 斯特凡