ไปเอาแฟ้มของใครเดทในชื่อแฟ้มคือสิ่งที่ยิ่งใหญ่กว่าบางอย่างเจาะจงวันที่ใช้ Powershell สคริปต์

0

คำถาม

ฉันต้องเฉพาะเรื่องเดท"2021/11/28"ฉันต้องการรายชื่อของแฟ้มออกจากตัวอย่างเช่นชื่อแฟ้ม(ด้านล่างนี้)ของใครชื่อแฟ้มของคือสิ่งที่ยิ่งใหญ่กว่า 2021/11/28. จำได้ไม่ใช่เวลาที่สร้างของแฟ้มชื่อ

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

ฉันหวังจะได้

 "abc_20211129_efg.*"
 "opq_20211130_rst.*"

ขอบคุณมากที่ช่วยด้วย

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

คำตอบที่ดีที่สุด

1

คุณไม่เข้มงวดต้องการวิเคราะห์ของคุณใช้เส้นสายในวันที่([datetime] โห):เพราะว่าวัน เชือก ฝังอยู่ในแฟ้มของคุณชื่ออยู่ในรูปแบบที่พวกเขา lexical การเรียงลำดับเป็นค่า chronological การเรียงลำดับ,คุณสามารถเปรียบเทียบข้อควา representations โดยตรง:

# 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.*|$)' ดูเหมือสำหรับ(สุดท้าย)หนีของสิ่ง 8 ตัวเลขในแต่ละชื่อแฟ้มผ่านทางถูกจับกลุ่ม((...)),สะท้อนอยู่ในห้องโดยอัตโนมัติ $Matches ตัวแปรเป็นรายการกับดัชนี 1 ($Matches[1])หลังจากนั้นถ้าพบ

  • '2021/11/28"' -replace '/' เอาทุก / ตัวอักษรจากข้อมูลข้อความเพื่อสร้างรูปแบบของวันที่ใช้เส้นสายเหมือนกัน สำหรับ brevity งแก้ปัญหาอยู่เหนือ performs นี้แทนที่ ในแต่ละเรื่องปฏิบัติการ. ในการฝึกนะอคุณจะแสดงมัน ครั้งก่อนที่วและกำหนดผลเป็นตัวแปรสำหรับใช้ภายในด้วยนะ

2021-11-23 20:35:51

แน่นอน,ฉันจะเร็วๆนี้ ยังไงก็ตามฉันมองไม่เห็นของฉันก่อนหน้านี้ความเห็นเลิกประชุม. Commenting อีกครั้ง"สุดยอดไปเลย! รหัสของคุณทำงานเหมือนลงอย่างสวยงามนะ ขอบคุณเป็นตัว"
Razz

คุณช่วย pls ช่วยด้วย ฉันทำงานอีกสคริปต์ซึ่งต้องการที่จะเปรียบเทียบเหมือนกับวันที่ของวันนี้ บางอย่างเหมือน..แต่ฉันกำลังทำการฟอร์แมตเหมือนไม่มีปัญหาอยู่เลยสินะ Where-Object {$_.Name -match '(?:^|.*\D)(\d{8})(?:\D.*|$)' -and $Matches[1] -eq (Get-Date).Date}
Razz

@Razz แทนที่ (Get-Date).Date กับ (Get-Date).ToString('yyyyMMdd'). ถ้าคุณต้องการให้ช่วย,ได้โปรดสร้างคำถามใหม่ซะหน่อย
mklement0

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่