這是一個使用正則表達式和一些虛擬文件名的例子。在你的例子中,你想用你的初始Get-ChildItem
命令替換$fileNames
。我只是將文件名輸送到使用正則表達式捕獲年份,月份和日期的where子句。然後,我將它傳遞給另一個where子句,該子句使用捕獲的數字構造一個對象並將其與開始和結束時間進行比較。
$startDate = New-Object -TypeName System.DateTime -ArgumentList @(2016, 1, 2)
$endDate = New-Object -TypeName System.DateTime -ArgumentList @(2016, 1, 4)
$fileNames = @(
"jflksafjlkasfs_2016-01-01_jkfdfjlkajklldsa.log",
"j221373213478_2016-01-02_jkdjdsalkdfusalkfl.log",
"j221373213478_2016-01-03_jkdjdsalkdfusalkfl.log",
"j221373213478_2016-01-04_jkdjdsalkdfusalkfl.log",
"j221373213478_2016-01-05_jkdjdsalkdfusalkfl.log")
$fileNames |
? { $_ -match "_(\d+)-(\d+)-(\d+)_" } |
? {
$date = New-Object System.DateTime -ArgumentList $Matches[1], $Matches[2], $Matches[3]
$date -ge $startDate -and $date -le $endDate
}
這裏是從上面的命令的輸出:
j221373213478_2016-01-02_jkdjdsalkdfusalkfl.log
j221373213478_2016-01-03_jkdjdsalkdfusalkfl.log
j221373213478_2016-01-04_jkdjdsalkdfusalkfl.log
我認爲修改後的版本適合你的場景會看起來像這樣(可能有som e小語法錯誤):
Get-Childitem -Path $Directory -OutBuffer 1000 -filter "*.log" |
? { $_.Name -match "_(\d+)-(\d+)-(\d+)_" } |
? {
$date = New-Object System.DateTime -ArgumentList $Matches[1], $Matches[2], $Matches[3]
$date -ge $startDate -and $date -le $endDate
} |
Select FullName, Name
哈哈它的作品完美!但是,如何/爲什麼?你能否請解釋它是如何工作的和/或指向我的方向,以便我可以自己學習。 – user1451070
@ user1451070哪部分你不清楚?我會盡力解釋它們。 –
它是如何獲得$ Matches [1],2等的。 – user1451070