Nie musisz ściśle rozbierać swoje wiersze na datę ([datetime]
egzemplarze): Ponieważ ciąg dat, wbudowane w nazwy plików mają format, w którym ich лексическая sortowanie równoważne chronologicznej sortowania, można bezpośrednio porównać prezentacji wierszy:
# 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.*|$)'
szuka (ostatni) uruchomienie dokładnie z 8 cyfr w każdym nazwy pliku za pomocą grupy przechwytywania ((...)
), odbija się w trybie automatycznym $Matches
zapis zmiennej z indeksem 1
($Matches[1]
) następnie, jeśli zostanie znaleziony.
'2021/11/28"' -replace '/'
usuwa wszystkie /
znaki z ciągu wejściowego, aby zrobić format wierszy chcesz taki sam. W skrócie powyższe rozwiązanie wykonuje tę wymianę w każdej operacji cyklu. W praktyce można by wykonywali to jeden raz, przed cyklem, i przypisuje wynik do zmiennej do użytku wewnątrz pętli.