gpt4 book ai didi

powershell - 从文件名中解析日期并按日期排序

转载 作者:行者123 更新时间:2023-12-03 20:51:57 37 4
gpt4 key购买 nike

我在一个文件夹中有一系列这样命名的文件: - myFile201801010703.file

我正在尝试解析文件夹中每个文件名的 yyyymmdd 部分,并根据日期将它们排序到数组中。

如果我有以下文件:

  • myFile201801200000.file (01/20/2018)
  • myFile201800100000.file (01/01/2018)
  • myFile201801100000.file (01/10/2018)

它会将它们排序成这样的数组:

  • myFile201800100000.file (01/01/2018)
  • myFile201801100000.file (01/10/2018)
  • myFile201801200000.file (01/20/2018)

我有一个过程适用于名称中包含时间戳的文件,但无法调整它以仅使用日期:

    # RegEx pattern to parse the timestamps
$Pattern = '(\d{4})(\d{2})(\d{2})*\' + ".fileExtension"
$FilesList = New-Object System.Collections.ArrayList
$Temp = New-Object System.Collections.ArrayList
Get-ChildItem $SourceFolder | ForEach {
if ($_.Name -match $Pattern) {
Write-Verbose "Add $($_.Name)" -Verbose
$Date = $Matches[2],$Matches[3],$Matches[1] -join '/'
$Time = $Matches[4..6] -join ':'
[void]$Temp.Add(
(New-Object PSObject -Property @{
Date = [datetime]"$($Date) $($Time)" #If I comment out $($Time)it doesn't work.
File = $_
}
))
}
}
} catch {
Write-Host "`n*** $Error ***`n"
}

# Sort the files by the parsed timestamp and add to $FilesList
$FilesList.AddRange(@($Temp | Sort Date | Select -Expand File))

# Clear out the temp collection
$Temp.Clear()

我认为可能是罪魁祸首的两行是:

$Time = $Matches[4..6] -join ':' 因为我没有解析任何时间

Date = [datetime]"$($Date) $($Time)" 同样,没有时间被解析。似乎也无法更改日期类型?

最佳答案

采用这种格式:

myFileYYYYMMddHHmm.file

日期和时间的各个部分已经从最大(年)到最小(分钟)排列 - 这使得字符串可以排序!

我们唯一需要做的就是获取扩展名前文件名的最后 12 位数字:

$SortedArray = Get-ChildItem *.file |Sort-Object {$_.BaseName -replace '^.*(\d{12})$','$1'}

使用的正则表达式模式:

^.*(\d{12})$

可以分割如下:

^              # start of string
.* # any character, 0 or more times
( # capture group
\d{12} # any digit, 12 times
) # end of capture group
$ # end of string

正则表达式引擎会将替换字符串中的 $1 扩展为“capture group #1”,即。我们最后选择的 12 位数字。

关于powershell - 从文件名中解析日期并按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48529660/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com