gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:32:32 26 4
gpt4 key购买 nike

希望你一切都好。

我是 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]*"

Get-Childitem中使用-File参数,仅返回文件。

(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 的日期。

关于powershell - 按文件名 Powershell 中的日期列出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64822345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com