LastWriteTime没有按DateTime排序

时间:2018-12-21 16:29:32

标签: powershell powershell-v3.0

我需要遍历目录,并删除除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获得正确排序的文件夹数组?

1 个答案:

答案 0 :(得分:1)

您应该仅指定属性名称作为Sort-Object的参数。也就是说,写Sort-Object LastWriteTime而不是Sort-Object $_.LastWriteTime