尝试教育自己:从
处理整个项目树时 get-childitem -recurse
我经常要从叶级到顶级执行它(例如,删除文件和文件夹,修改树的上层然后尝试处理较低级别是有问题的。
要解决这个问题,我已经根据路径中的分隔符数量对整个集合进行排序,首先获得叶级别,然后是树的上层:
$someFiles = Get-ChildItem -Recurse |
Sort @{Expression={ ( $_.fullname | select-string "\\" -AllMatches ).matches.count };
Descending=$true }
这感觉不对 - 我的编码经验有限,但我知道如果我只是以正确的方式遍历树,那么这种昂贵且愚蠢的排序不应该是必要的。但是 - 安全是如此方便!
更聪明的方法是什么?具体来说,有没有办法使用get-childitem遍历树,从叶子向上,不需要对所有结果进行排序?
答案 0 :(得分:3)
您可以避免使用正则表达式,只需使用字符串拆分方法即可。它也表现得更好。
dir -recurse | sort -Property @{ Expression = {$_.FullName.Split('\').Count} } -Desc
结果:
TotalMilliseconds : 346.1253
... VS
Get-ChildItem -Recurse | Sort @{Expression={ ( $_.fullname | select-string "\\" -AllMatches ).matches.count }; Descending=$true }
结果:
TotalMilliseconds : 953.6606
答案 1 :(得分:2)
我只使用全名的长度:
gci -recurse | sort @{expression = {$_.fullname.length}} -descending
所有子项都将在其父容器之前进行排序。