簡體   English   中英

按文件名 Powershell 中的日期列出文件

[英]List files by date in filename Powershell

我希望你一切都好。

我是 Powershell 的新手,正在嘗試制作一個腳本,允許根據文件名中的日期列出 7 天前的文件,然后將它們復制/移動到另一個目錄。

文件結構:2020_06_11_DB.txt YYYY_MM_dd

我設置了這段腳本,但它只將文件與參考日期(DateRef)相匹配,而不是至少(舊):

$SourceDB = "C:\DB\"
$DestinationDB = "C:\Destination\DB\"
$DateRef = Get-Date ((Get-Date).AddDays(-7)) -Format yyyy_MM_dd

$Query = Get-ChildItem $SourceDB -Filter "*$DateRef*" |
ForEach-object {
    Copy-Item -Path $_.FullName -Destination $DestinationDB
}

我嘗試過像 -le 和 -lt 這樣的運算符,但沒有成功。 如果你能幫助我,我將不勝感激。

Get-ChildItem $SourceDB -Filter '*.txt' | Where-Object {$_.BaseName -le "*$DateRef*"}

謝謝!

比較日期時,您需要使用DateTime對象。 因此,挑戰是在進行比較之前從文件名中提取日期字符串並將它們轉換為DateTime對象。

$SourceDB = "C:\DB\"
$DestinationDB = "C:\Destination\DB\"
$DateRef = (Get-Date).AddDays(-7).Date

$Query = Get-ChildItem $SourceDB -File | Where {
    $_.BaseName -match '\d{4}_\d{2}_\d{2}' -and [datetime]::ParseExact(([regex]::Match($_.BaseName,'\d{4}_\d{2}_\d{2}').Value),'yyyy_MM_dd',$null) -le $DateRef } |
        Foreach-Object {
            Copy-Item -Path $_.FullName -Destination $DestinationDB
        } 
    

解釋:

我不想阻止您使用-Filter因為它比在Where-Object內部過濾要好。 因此,您可以首先使用-Filter '*_*_*'或通配符您的路徑-Path "$SourceDB*[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]*"部分過濾-Path "$SourceDB*[0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9]*"

使用-File參數Get-Childitem ,只返回文件。

(Get-Date).AddDays(-7).Date是今天午夜前 7 天。

$_.BaseName -match '\\d{4}_\\d{2}_\\d{2}'匹配格式為####_##_##

[regex]::Match($_.BaseName,'\\d{4}_\\d{2}_\\d{2}').Value返回匹配的字符串####_##_## [datetime]::ParseExact()將匹配的字符串(格式為 'yyyy_MM_dd')轉換為DateTime對象。

-le小於或等於運算符。 所以-le $DateRef返回早於或等於$DateRef

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM