Nu ai nevoie neapărat de de a analiza sforile în date ([datetime]
cazuri): Deoarece la data siruri de caractere încorporate în numele de fișiere sunt într-un format care lor lexical de sortare este echivalent cu cronologică de sortare, puteți compara șir de reprezentări direct:
# 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.*|$)'
se pare pentru a (ultima) a alerga de exact 8 cifre în fiecare nume de fișier prin intermediul unui grup de capturare ((...)
), reflectate în automate $Matches
variabila de intrare cu indicele de 1
($Matches[1]
) după aceea, dacă este găsit.
'2021/11/28"' -replace '/'
elimină toate /
caracterele din șirul de intrare, pentru a face formatul de data siruri de caractere la fel. Pentru concizie, soluția de mai sus îndeplinește această înlocuire în fiecare funcționarea în buclă. În practică, va efectua o dată, înainte de bucla, și atribuie rezultatul unei variabile pentru utilizare în interiorul buclei.