Obține fișierele a căror dată în numele fișierului este mai mare decât o dată specifică, folosind Powershell script

0

Problema

Am o anumită dată "2021/11/28", vreau lista de fișiere, de exemplu nume de fișiere(de mai jos), al cărui nume de fișier este mai mare decât 2021/11/28. amintiți-vă să nu timpul de creare de nume de fișier.

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

Aștept pentru a obține

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

Apreciez ajutorul tău.

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

Cel mai bun răspuns

1

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.

2021-11-23 20:35:51

sigur, o voi face curând. Cumva nu am putut vedea comentariul meu anterior. Comentând din nou " Minunat! Codul a lucrat ca un farmec. Multumesc o tona"
Razz

Ai putea pls help. Eu sunt de lucru pe alte script-ul, care necesită pentru a compara aceeași cu data de astăzi. Ceva de genul asta..dar eu sunt obtinerea probleme de formatare. Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@Razz, înlocuiți (Get-Date).Date cu (Get-Date).ToString('yyyyMMdd'). Dacă aveți nevoie de ajutor suplimentar, vă rugăm să creați o nouă întrebare post.
mklement0

În alte limbi

Această pagină este în alte limbi

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