我正在尝试查看文件夹中的每个项目,并将每个项目添加到按文件名中的日期戳排序的数组中。
例如,我有三个文件:
我不确定如何解析每个时间并按升序将它们添加到数组中。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以为此做的是使用字符串方法.Split()
和[datetime]
方法TryParseExact()
。浏览每个文件并为" FromFileDate"添加一个属性。然后对此进行排序。
$path = "C:\temp"
Get-ChildItem -Filter "*.txt" -Path $path | ForEach-Object{
$date = ($_.BaseName).Split("_",2)[1]
$result = New-Object DateTime
if([datetime]::TryParseExact($date,"yyyyMMdd_hhmmss",[System.Globalization.CultureInfo]::InvariantCulture,[System.Globalization.DateTimeStyles]::None,[ref]$result)){
# This is a good date
Add-Member -InputObject $_ -MemberType NoteProperty -Name "FromFileDate" -Value $result -PassThru
} Else {
# Could not parse date from filename
Add-Member -InputObject $_ -MemberType NoteProperty -Name "FromFileDate" -Value "Could not Parse" -PassThru
}
} | Select-Object Name,fromfiledate | Sort-Object fromfiledate
我们取每个文本文件的基名,并将其从第一个下划线分成两部分。使用TryParseExact
,然后我们尝试转换" date"字符串格式为" yyyyMMdd_hhmmss"。由于我们在解析日期时遇到问题而使用TryParseExact
,因此代码将继续。
示例输出
Name FromFileDate
---- ------------
myfile_20150812_030949.txt 8/12/2015 3:09:49 AM
myfile_20150813_040949.txt 8/13/2015 4:09:49 AM
files.txt Could not Parse
如果您不想要输出中的错误数据,则简单的Where-Object{$_.fromfiledate -is [datetime]}
会删除这些条目。