Ottenere i file la cui data nel nome del file è maggiore di una data specifica utilizzando uno script di Powershell

0

Domanda

Ho una data specifica "2021/11/28", voglio l'elenco dei file di esempio nomi di file(sotto) il cui nome del file è maggiore di 2021/11/28. non ricordare l'ora di creazione dei nomi di file.

 "test_20211122_aba.*"
 "abc_20211129_efg.*"
 "hij_20211112_lmn.*" 
 "opq_20211130_rst.*"

Mi aspettavo di ottenere

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

Davvero apprezzato il vostro aiuto.

powershell powershell-4.0
2021-11-23 18:40:47
1

Migliore risposta

1

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.

2021-11-23 20:35:51

certo, lo farò presto. In qualche modo ho potuto vedere il mio precedente commento. Commentando il nuovo " Fantastico!!! Il codice ha lavorato come un fascino. Grazie una tonnellata"
Razz

Potrebbe pls aiuto. Sto lavorando su altri script che richiede di confrontare lo stesso con la data di oggi. Qualcosa di simile a questo..ma io sto problema di formattazione. Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@Razz, sostituire (Get-Date).Date con (Get-Date).ToString('yyyyMMdd'). Se avete bisogno di ulteriore assistenza, si prega di creare una nuova domanda posta.
mklement0

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................