Nepotřebujete analyzovat vaše struny do data ([datetime]
instance): Protože datum řetězce vložené do svého jména souborů jsou ve formátu, kde je jejich lexikální třídění odpovídá chronologické třídění, můžete porovnat řetězec reprezentace přímo:
# Simulate output from a Get-ChildItem call.
$files = [System.IO.FileInfo[]] (
"test_20211122_aba1.txt",
"abc_20211129_efg2.txt",
"hij_20211112_lmn3.txt",
"hij_20211112_lmn4.txt",
"opq_20211130_rst5.txt"
)
# Filter the array of files.
$resultFiles =
$files | Where-Object {
$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and
$Matches[1] -gt ('2021/11/28"' -replace '/')
}
# Print the names of the filtered files.
$resultFiles.Name
$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)'
vypadá to na (poslední) běh přesně 8 číslic v každém názvu souboru prostřednictvím zachytit skupinu ((...)
), což se odráží v automatické $Matches
variabilní vstup s indexem 1
($Matches[1]
) poté, pokud nalezen.
'2021/11/28"' -replace '/'
odstraňuje všechny /
znaků ze vstupního řetězce, aby formát data řetězce stejné. Pro stručnost, řešení uvedené výše provádí toto nahrazení v každé smyčce operace. V praxi byste to provést jednou, před smyčku, a přiřadit výsledek do proměnné pro použití uvnitř smyčky.