Powershell komut dosyasını kullanarak dosya adındaki tarihi belirli bir tarihten büyük olan dosyaları alın

0

Soru

Belirli bir "2021/11/28" tarihim var, dosya adı 2021/11/28'den büyük olan örnek dosya adlarından(aşağıda) dosyaların listesini istiyorum. dosya adlarının oluşturulma zamanını unutmayın.

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

Almak için bekliyorum

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

Yardımın için gerçekten minnettarım.

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

En iyi cevabı

1

Dizelerinizi kesinlikle tarihlere ayırmanız gerekmez ([datetime] örnekler): Dosya adlarınıza katıştırılmış tarih dizeleri sözcüksel sıralamalarının kronolojik sıralamaya eşdeğer olduğu bir biçimde olduğundan, dize gösterimlerini doğrudan karşılaştırabilirsiniz:

# 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.*|$)' bir yakalama grubu aracılığıyla her dosya adında tam olarak 8 basamaklı (son) çalışmayı arar ((...)), otomatik yansıyan $Matches değişkenin index ile girişi 1 ($Matches[1]) daha sonra bulunursa.

  • '2021/11/28"' -replace '/' tümünü kaldırır / tarih dizelerinin biçimini aynı yapmak için giriş dizesindeki karakterler. Kısalık için, yukarıdaki çözüm her döngü işleminde bu değişimi gerçekleştirir. Uygulamada, döngüden önce bir kez gerçekleştirirsiniz ve sonucu döngü içinde kullanılmak üzere bir değişkene atarsınız.

2021-11-23 20:35:51

elbette, yakında geleceğim. Bir şekilde önceki yorumumu göremedim. Tekrar yorum yapmak " Harika! Kodun bir cazibe gibi işledi. Bir ton teşekkürler"
Razz

Misin pls yardım. Aynı şeyi bugünün tarihi ile karşılaştırmayı gerektiren başka bir senaryo üzerinde çalışıyorum. Bunun gibi bir şey..ama biçimlendirme sorunu alıyorum. Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@ Razz, değiştir (Get-Date).Date ile (Get-Date).ToString('yyyyMMdd'). Daha fazla yardıma ihtiyacınız olursa, lütfen yeni bir soru yazısı oluşturun.
mklement0

Diğer dillerde

Bu sayfa diğer dillerde

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