我有一個要求列出所有比X天更早的文件,但我需要在「yyyyMMdd」格式的日期文件名上運行此比較,而不是上次修改時間文件。PowerShell文件名與日期比較
回答
- 以下腳本將忽略文件名中日期的任何前綴/後綴/擴展名
$XDays = -20
$Until = (get-date -Hour 0 -Minute 0 -Second 0).AddDays($XDays)
"match files until {0}" -f $Until.ToString('yyyyMMdd')
# This RE will match any date in this century (but not validate it)
$RE = [RegEx]'^.*?(?<date>20[01][0-9][01][0-9][0-3][0-9]).*$'
Get-ChildItem "*20[01][0-9][01][0-9][0-3][0-9]*" | Sort BaseName| ForEach-Object {
If ($_.BaseName -Match $RE){
If ([datetime]::ParseExact($Matches.date,'yyyyMMdd',$null) -le $Until){
$_
}
}
}
要修改從當前目錄中的格式輸出改變內$_
到$_.FullName
或$_.Name
輸出示例:
PS A:\> .\SO_45642524.ps1
match files until 20170723
Directory: A:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 08/11/2017 23:35 8 prefix20170718suffix.txt
-a---- 08/11/2017 23:35 8 prefix20170719suffix.txt
-a---- 08/11/2017 23:35 8 prefix20170720suffix.txt
-a---- 08/11/2017 23:35 8 prefix20170721suffix.txt
-a---- 08/11/2017 23:35 8 prefix20170722suffix.txt
-a---- 08/11/2017 23:35 8 prefix20170723suffix.txt
感謝您的回答。 我試過這個代碼片段,但它沒有返回所需的文件。 直到這個標記Get-ChildItem「* 20 [01] [0-9] [01] [0-9] [0-3] [0-9] *」,它的一切都很好。但在foreach中,parseexact不起作用。是否有可能將所有解析的日期存儲在另一個對象的屬性中? –
然後[編輯](https://stackoverflow.com/posts/45642524/edit)您的問題提供您的文件名稱樣本和你的期望。很難與錯過的細節爭論。 – LotPings
嘿,那是我的錯誤。我只是在正則表達式中做了一個小改動,並且工作。 –
是這樣的嗎?
Get-ChildItem "c:\temp" -file | where { $_.LastWriteTime.Date.ToString("yyyyMMdd") -le "20111203" }
or this?
Get-ChildItem "c:\temp" -file | where { (get-date $_.LastWriteTime -Format "yyyyMMdd") -le "20170803" }
您將需要去除文件名並將日期部分轉換爲日期時間值,之後您將能夠將其刪除。下面是如何將其轉換爲datetime一個例子:
gci -Filter *.txt | select Name, @{Name="DateFile"; Expression = {[datetime]::ParseExact($_.BaseName.substring(5),'yyyyMMdd',$null)}}
並刪除舊超過一週可以說這些文件,我會做如下:
gci -Filter *.txt | Select-Object FullName, @{Name="DateFile"; Expression = {[datetime]::ParseExact($_.BaseName.substring(5),'yyyyMMdd',$null)}} | Where-Object {$_.DateFile -lt (get-date).AddDays(-7)} | ForEach-Object {Remove-Item -Path $_.FullName}
- 1. PowerShell:比較日期
- 2. Powershell比較文件
- 3. Powershell文件比較
- 4. 批處理 - 比較文件的日期與實際日期
- 5. 比較PowerShell/SharePoint列表日期
- 6. 在PowerShell中比較CSV列的日期
- 7. 將SSI日期與javascript日期比較
- 8. 比較日期與日期時間
- 9. 比較日期:「日期與零比較失敗」
- 10. 與bash比較日期
- 11. 與PHP比較日期
- 12. 與CodeIgnitor比較日期
- 13. 日期比較與VB.NET
- 14. 比較cron與php日期()
- 15. Perl與MySQL比較日期
- 16. 與日期相比較Javascript?
- 17. 與Parse.com比較日期
- 18. 比較日期與sharepoint
- 19. PHP日期與SQL比較
- 20. 比較的日期與LINQ
- 21. 與日期相比較?
- 22. 與Mongoose的日期比較
- 23. 比較日期與SQLAlchemy,SQLite
- 24. 比較日期與PHP
- 25. 與IF比較日期
- 26. 比較日期與時區
- 27. 與空值比較日期
- 28. MongoDb MapReduce與日期比較
- 29. 比較日期與jodatime
- 30. 使用系統日期作爲比較文件的文件名
你嘗試過什麼?如果你分享迄今爲止所做的工作以及你被困住的地方,你更有可能在這裏得到幫助。 –