使用此命令,我可以在目录中搜索最新文件:
gci C:\temp | sort LastWriteTime -descending | select -first 1
我的目录相当大,包含60'000 + txt文件。运行此命令需要:
PS C:\xy> measure-command {gci C:\temp | sort LastWriteTime -descending | select -first 1}
Days : 0
Hours : 0
Minutes : 0
Seconds : 13
Milliseconds : 465
Ticks : 134657703
TotalDays : 0.000155853822916667
TotalHours : 0.00374049175
TotalMinutes : 0.224429505
TotalSeconds : 13.4657703
TotalMilliseconds : 13465.7703
如您所见,此命令需要很长时间才能完成。
我的任务是获取与命令返回的文件具有相同LastWriteTime
属性的所有文件(到分钟)。
我试过这样的事情:
$file = gci C:\temp -OutVariable files | sort LastWriteTime -descending |
select -first 1 | % { $_.LastWriteTime }
$myfiles = $files | ? {$_.LastWriteTime -like $file}
当我比较找到LastWriteTime的$file
和应该包含具有相同LastWriteTime的所有文件的$myfiles
时,$myfiles
总是只包含一个文件 - 这是因为秒是每个对象都有所不同:
PS C:\xy> $file
Montag, 21. November 2016 13:10:08
如何通过比较lastwritetime属性找到我需要的文件?
答案 0 :(得分:2)
$myfiles
始终只包含一个文件 - 这是因为秒数 每个对象都有所不同:
然后只比较您感兴趣的时间戳部分 - 在本例中我们将比较分钟:
$Timestamp = $file.ToString('yyyyMMddHHmm')
$myfiles = $files | ? {$_.LastWriteTime.ToString('yyyyMMddHHmm') -eq $file}
答案 1 :(得分:1)
我认为您只需比较年,月,日,小时和分钟
$myfiles = $files | ? {$_.LastWriteTime.Year -eq $file.Year `
-and $_.LastWriteTime.Month -eq $file.Month `
-and $_.LastWriteTime.Day -eq $file.Day `
-and $_.LastWriteTime.Hour -eq $file.Hour `
-and $_.LastWriteTime.Minute -eq $file.Minute }
答案 2 :(得分:0)
好像你只想要时间而不是日期,所以,我会利用一个FileInfo方法来简化比较。
抓住你所追求的时间:
$time = (Get-ChildItem -Path C:\temp -Filter "*.txt" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).LastWriteTime.ToShortTimeString()
然后,抓取匹配的文件:
Get-ChildItem -Path C:\temp -Filter "*.txt" | Sort-Object LastWriteTime | Where-Object { $_.LastWriteTime.ToShortTimeString() -eq $time }
答案 3 :(得分:-1)
一些想法可能至少可以加快速度。 你不确定他们会达到多少。 这没有经过测试,因此可能包含错误;)
$file = ((gci C:\temp -OutVariable files).LastWriteTime | sort -Descending)[0]
$myfiles = $files.Where{$_.LastWriteTime -match $file}