Získať súbory, ktorých dátum súboru je väčšia, ako nejaký konkrétny dátum, pomocou Powershell skriptu

0

Otázka

Mám konkrétny dátum "2021/11/28", chcem zozname súborov, napríklad súborov(nižšie), ktorého názov súboru je väčšia, než 2021/11/28. pamätajte si, nie čas vytvorenia súboru mien.

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

Som očakával, aby si

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

Naozaj oceňujem vašu pomoc.

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

Najlepšiu odpoveď

1

Nemusíte nevyhnutne potrebné analyzovať vaše reťazcov do dátumy ([datetime] inštancie): Pretože dátum reťazce vložený v súbore názvy sú vo formáte, kde ich lexikálnej triedenie je ekvivalentné chronologické triedenie, môžete porovnať string vyhlásenia priamo:

# 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.*|$)' vyzerá na (posledný) spustiť presne 8 číslic v každý názov súboru cez zachytiť skupiny ((...)), ktorý sa odráža v automatickom $Matches variabilný vstup s indexom 1 ($Matches[1]) potom, ak zistí.

  • '2021/11/28"' -replace '/' odstraňuje všetky / znaky zo vstupného reťazca, aby sa formát dátumu reťazce rovnaké. Pre stručnosť, riešenie vyššie vykonáva toto nahradenie v každej slučky prevádzky. V praxi by ste vykonávať ju raz, pred slučky, a priradiť výsledok premennej pre použitie vo vnútri slučky.

2021-11-23 20:35:51

určite som čoskoro. Nejako som nemohol vidieť môjho predchádzajúceho komentára. Komentovanie opäť " Awesome! Váš kód pracoval ako kúzlo. Vďaka tony"
Razz

Mohli by ste pls pomozte. Pracujem na ďalších skript, ktorý vyžaduje porovnávať rovnaké s dnešným dátumom. Niečo podobné..ale ja som stále formátovanie problém. Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@Razz, nahradiť (Get-Date).Date s (Get-Date).ToString('yyyyMMdd'). Ak potrebujete ďalšiu pomoc, prosím vytvorte novú otázku príspevok.
mklement0

V iných jazykoch

Táto stránka je v iných jazykoch

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