Obtenir les fichiers dont la date dans le nom de fichier est supérieur à une date spécifique à l'aide de script Powershell

0

La question

J'ai une date spécifique "2021/11/28", je veux la liste des fichiers à partir de l'exemple des noms de fichiers(ci-dessous) dont le nom de fichier est supérieure à 2021/11/28. rappelez-vous pas le temps de création des noms de fichier.

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

Je m'attends à recevoir

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

Vraiment reconnaissant de votre aide.

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

La meilleure réponse

1

Vous n'avez absolument pas besoin d'analyser vos chaînes en dates ([datetime] occurrences): Parce que la date de chaînes intégrées dans vos noms de fichiers sont dans un format où leur lexicale de tri est l'équivalent chronologique de tri, vous pouvez comparer les représentations de chaîne directement:

# 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.*|$)' recherche (la dernière) exécuter exactement 8 chiffres dans chaque nom de fichier par l'intermédiaire d'un groupe de capture ((...)), traduit de l'automatique $Matches variable d'entrée avec index 1 ($Matches[1]) par la suite, s'il est trouvé.

  • '2021/11/28"' -replace '/' supprime tous les / les caractères de la chaîne en entrée, pour rendre le format de la date des chaînes de même. Par souci de concision, la solution ci-dessus effectue cette de remplacement dans chaque boucle de l'opération. Dans la pratique, vous souhaitez effectuer une fois, avant la boucle, et affecter le résultat à une variable pour une utilisation à l'intérieur de la boucle.

2021-11-23 20:35:51

bien sûr, je vais vite. De toute façon je ne pouvais pas voir mon commentaire précédent. Commentant nouveau " Génial! Votre code a fonctionné comme un charme. Merci une tonne"
Razz

Pourriez-vous svp aider. Je suis en train de travailler sur d'autres script qui nécessite de comparer la même chose avec la date d'aujourd'hui. Quelque chose comme ça..mais je suis de problème de mise en forme. Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@Razz, remplacer (Get-Date).Date avec (Get-Date).ToString('yyyyMMdd'). Si vous avez besoin de plus d'aide, veuillez créer une nouvelle question post.
mklement0

Dans d'autres langues

Cette page est dans d'autres langues

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