首页 > 解决方案 > 获取日期范围内的文件不起作用 Powershell

问题描述

我尝试获取某个日期范围内的文件,并遵循一些主题以使其变得更好,但是....我不明白一件事....

我的问题:我搜索一个包含字符串的文件,但我有多个包含它的文件,所以我决定按日期范围过滤,因为我知道这个。这是我的代码:

$Datestart=" Start of date range "; ex : 20042020_1500
$Dateend=" End of date range "; ex : 20042020_1510
$MessageId="The string i want"; ex : 2015195558.22355@wsfrf1412
$Target="my repository"; ex : D:/Test\

$DateStartok = [DateTime]::ParseExact($Datestart, "ddMMyyyy_HHmm", [Globalization.CultureInfo]::InvariantCulture);

$DateEndok = [DateTime]::ParseExact($Dateend, "ddMMyyyy_HHmm", [Globalization.CultureInfo]::InvariantCulture);

Select-String -path $TargetDir*.txt -pattern $MessageId |
   Where-Object { $_.CreationTime -gt $DateStartOk -AND $_.CreationTime -lt $DateEndOK }; 

我对这段代码的解释是:

在我指定的日期范围内返回包含我想要的字符串的文件。

此代码将使用变量,但我尝试使用真实信息来测试它: 结果是:此代码不返回任何结果。

我试试这个:

Select-String -path $TargetDir*.txt -pattern $MessageId |
   Where-Object { $_.CreationTime -lt $DateEndOK };

该脚本将好文件返回给我。

我试试这个:

Select-String -path $TargetDir*.txt -pattern $MessageId |
   Where-Object { $_.CreationTime -lt $DateStartOk }; 

脚本返回了相同的结果,所以它也可以工作......

对于我的示例,该文件是在 20/04/2020 的 15h05 创建的,我尝试使用范围 15h00--->15h10

在正常情况下,脚本必须在第一种情况下返回结果,但在第二种情况下则不...

我再次尝试使用与我的两个示例相同的代码,但使用 -gt 而不是 -lt,我对此没有任何结果....

你能帮助我吗 ?感谢你们 :)

标签: powershell

解决方案


我会Get-ChildItem先获取日期范围内的文件集合,然后使用Select-String这些文件来查找您要查找的字符串。

像这样的东西:

$DateStart = Get-Date -Year 2020 -Month 4 -Day 20 -Hour 15 -Minute 0  -Second 0   # "Start of date range"
$DateEnd   = Get-Date -Year 2020 -Month 4 -Day 20 -Hour 15 -Minute 10 -Second 0   # "End of date range"
$MessageId = '2015195558.22355@wsfrf1412'                                         # "The string i want"
$Source    = 'D:\Test'                                                            # "my repository"

# you may want to add the -Recurse switch here if the code should also look inside subfolders
Get-ChildItem -Path $Source -Filter '*.txt' -File | 
    Where-Object { $_.CreationTime -gt $DateStart -and $_.CreationTime -lt $DateEnd } |
    Select-String -Pattern $MessageId -SimpleMatch | 
    Select-Object -ExpandProperty Path

另外,我认为您实际上想使用LastWriteTime属性上的日期范围,而不是CreationTime. LastWriteTime 是文件最后更新的日期。CreationTime 可能要老得多..

PS在您的代码中,您正在定义$Target,但稍后您将使用未定义的变量$TargetDir


推荐阅读