我正在尝试创建一个列表,计算文件夹中文件的数量,然后根据该数量对文件夹进行排序。我有以下代码,但它不起作用(即不排序):
Get-Childitem -Directory |
Foreach-Object {
$folderList=$_.Name
$fileListInFolder=(Get-Childitem -file -Path $_)
$fileCountInFolder=@()
$fileCountInFolder+=("{0:d2}" -f $fileListInFolder.count)
$arrayOfFileCountInFolder=(Write-Output $fileCountInFolder" "$folderList)
$arrayOfFileCountInFolder | Sort-Object
}
该脚本生成如下所示的列表(第一个数字代表文件数,字符串的其余部分是目录):
41 02 F OR 12K48b
21 03 F CC 12K48b
05 05 F OR 12K48b
21 06 B OR 06K64b
我得到了我想要的列表,但它没有排序。我错过了什么?
PS 如果我手动将这些字符串输入到数组中,排序就会起作用。例如:
$array=@("41 02 F OR 12K48b","21 03 F CC 12K48b","05 05 F OR 12K48b","21 06 B OR 06K64b")
$array | Sort-Object
结果是:
05 05 F OR 12K48b
21 03 F CC 12K48b
21 06 B OR 06K64b
41 02 F OR 12K48b
答案1
您的代码未进行排序,因为您立即将每个文件夹的计数发送到Sort-Object
。尝试在收集/计数文件后发送结果。将Foreach-Object
的右括号移到管道符号前面,然后进行排序。
Get-Childitem -Directory |
Foreach-Object {
$folderList=$_.Name
$fileListInFolder=(Get-Childitem -file -Path $_)
$fileCountInFolder=@()
$fileCountInFolder+=("{0:d2}" -f $fileListInFolder.count)
$arrayOfFileCountInFolder=(Write-Output $fileCountInFolder" "$folderList)
$arrayOfFileCountInFolder} | Sort-Object