Non è strettamente necessario analizzare le stringhe in date ([datetime]
istanze): Perché la data stringhe criptate nei nomi di file sono in un formato in cui il loro lessicale ordinamento è equivalente alla cronologico di ordinamento, è possibile confrontare le rappresentazioni di stringa direttamente:
# 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.*|$)'
cerca (l'ultimo) eseguire esattamente le 8 cifre di ogni nome di file tramite acquisizione di gruppo ((...)
), riflette in automatico $Matches
variabile di ingresso con indice 1
($Matches[1]
successivamente, se trovato.
'2021/11/28"' -replace '/'
rimuove tutti /
caratteri dalla stringa di input, per rendere il formato della data stringhe stesso. Per brevità, la soluzione di cui sopra esegue la sostituzione, in ogni ciclo di funzionamento. In pratica, si dovrebbe eseguire una volta, prima del ciclo, e assegnare il risultato ad una variabile per l'uso all'interno del ciclo.