Powershell脚本,用于获取字符串中具有特定日期的文件

Powershell脚本,用于获取字符串中具有特定日期的文件,powershell,powershell-2.0,Powershell,Powershell 2.0,我正在构建一个powershell脚本,以仅获取字符串中具有特定日期(昨天的日期)的文件并显示其名称。但事情似乎进展不顺利。我尝试过谷歌搜索,但没有找到具体的帮助: $a = (Get-Date).AddDays(-1).ToString('yyyyMMdd') $b = Get-ChildItem "E:\Export" -Filter {$_.Name -like '*'+$a.ToString()} Get-ChildItem "E:\Export" -Filter *.txt |

我正在构建一个powershell脚本,以仅获取字符串中具有特定日期(昨天的日期)的文件并显示其名称。但事情似乎进展不顺利。我尝试过谷歌搜索,但没有找到具体的帮助:

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')

$b = Get-ChildItem "E:\Export" -Filter {$_.Name -like '*'+$a.ToString()}

Get-ChildItem "E:\Export" -Filter *.txt |

Foreach-Object {

    If ($b -like $a)
    {
    Write-Host $b
    }

}

任何帮助都将不胜感激。

已经是一个字符串了。不能简单地将脚本块作为过滤器

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$b = Get-ChildItem "E:\Export" | Where-Object BaseName -like "*$a*"
$b


$a
已经是一个字符串。不能简单地将脚本块作为过滤器

$a = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
$b = Get-ChildItem "E:\Export" | Where-Object BaseName -like "*$a*"
$b

td;dr

$b = Get-ChildItem "E:\Export" -Filter ('*' + $a)
或者,使用PowerShell的字符串扩展(插值):


-过滤器
参数值:

  • 始终键入
    [string]

  • 它们的特定语法依赖于提供程序

因为您处理的是文件,所以解释
-Filter
的是
文件系统
PS提供程序,它需要一个通配符表达式作为参数,这是基础Windows API所接受的;通配符表达式与文件名隐式匹配

注:

  • 通常,例如在本例中,此类通配符表达式的工作原理与相同,但前者有一些特殊之处,以便支持遗留应用程序,而后者提供了其他功能

  • 没有标准提供程序接受带有任意PowerShell代码的脚本块作为
    -Filter
    参数,尽管它们在Active Directory提供程序中广泛使用,但被误导了-请参阅

要通过PowerShell代码中的脚本块对输出对象执行任意筛选,请通过管道连接到
Where-Object
cmdlet,如中所示

但是,如果可行,应始终首选使用
-Filter
,因为它在源代码处进行过滤,这意味着提供程序将已过滤的结果返回到PowerShell(而不是在事实发生后在PowerShell代码中过滤结果),能大大加快操作速度

td;dr

$b = Get-ChildItem "E:\Export" -Filter ('*' + $a)
或者,使用PowerShell的字符串扩展(插值):


-过滤器
参数值:

  • 始终键入
    [string]

  • 它们的特定语法依赖于提供程序

因为您处理的是文件,所以解释
-Filter
的是
文件系统
PS提供程序,它需要一个通配符表达式作为参数,这是基础Windows API所接受的;通配符表达式与文件名隐式匹配

注:

  • 通常,例如在本例中,此类通配符表达式的工作原理与相同,但前者有一些特殊之处,以便支持遗留应用程序,而后者提供了其他功能

  • 没有标准提供程序接受带有任意PowerShell代码的脚本块作为
    -Filter
    参数,尽管它们在Active Directory提供程序中广泛使用,但被误导了-请参阅

要通过PowerShell代码中的脚本块对输出对象执行任意筛选,请通过管道连接到
Where-Object
cmdlet,如中所示


但是,如果可行,应始终首选使用
-Filter
,因为它在源代码处进行过滤,这意味着提供程序将已过滤的结果返回到PowerShell(而不是在事实发生后在PowerShell代码中过滤结果),可以大大加快操作

也就是说,
-Filter“*$a*”
也应该可以代替
Where对象
。也就是说,
-Filter“*$a*”
也应该代替
Where对象