我需要遍历目录,并删除除10个最新文件夹以外的所有文件夹。经过一堆问题之后,我明白了
$folder = "C:\Projects\BuildDeleteTest"
$keep = 10
$folders = Get-ChildItem $folder
#echo $folders
#echo $folders.Count
echo $folders | Sort-Object -Property $_.LastWriteTime.DateTime | Select-Object -First (20)
我可以删除所有项目,然后删除文件夹。但是,由于我的文件夹列表是
,因此LastWriteDateTime实际上并未按DateTime排序。Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 12/21/2018 10:01 AM 01 - Copy (12)
d----- 12/21/2018 10:01 AM 01 - Copy (13)
d----- 12/21/2018 10:02 AM 01 - Copy (14)
d----- 12/21/2018 10:02 AM 01 - Copy (15)
d----- 12/21/2018 9:35 AM 01 - Copy (16)
d----- 12/21/2018 10:01 AM 01 - Copy (17)
d----- 12/21/2018 10:06 AM 01 - Copy (17) - Copy
d----- 12/21/2018 10:03 AM 01 - Copy (2)
d----- 12/21/2018 10:04 AM 01 - Copy (2) - Copy
d----- 12/21/2018 10:03 AM 01 - Copy (3)
d----- 12/21/2018 10:04 AM 01 - Copy (3) - Copy
很显然,01 - Copy (16)
是最早的文件,应该返回列表的顶部,但不是。升序排序始终返回Copy (12)
作为第一个,而降序始终返回01 - Copy (3) - Copy
。此外,Copy (16)
之后的所有文件夹显然都是乱序。
如何基于LastWriteTime获得正确排序的文件夹数组?
答案 0 :(得分:1)
您应该仅指定属性名称作为Sort-Object
的参数。也就是说,写Sort-Object LastWriteTime
而不是Sort-Object $_.LastWriteTime
。