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

时间:2018-12-14 21:11:00

标签: powershell powershell-v2.0

我正在构建一个Powershell脚本,以仅抓取字符串中具有特定日期(昨天的日期)的文件并显示其名称。但这似乎并不顺利。我已经尝试使用Google搜索,但是没有找到对我正在尝试做的事情的专门帮助:

$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
    }

}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

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

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

$b = Get-ChildItem "E:\Export\*$a*"

答案 1 :(得分:3)

td; dr

$b = Get-ChildItem "E:\Export" -Filter ('*' + $a)

或者,使用PowerShell的字符串扩展(插值):

$b = Get-ChildItem "E:\Export" -Filter "*$a"

-Filter参数值:

  • 总是 [string]

  • 其特定的语法提供者相关的

由于您要处理文件,因此FileSystem PS提供程序会解释-Filter,并且期望通配符表达式为基础Windows API接受的参数;通配符表达式与文件 name 隐式匹配。

注意:

  • 通常-例如在这种情况下-这样的通配符表达式的作用与PowerShell's own wildcard expressions相同,但是前者具有怪异之处以支持旧版应用程序,而后者则提供了附加功能。

  • 没有标准提供程序接受带有任意PowerShell代码作为-Filter参数的脚本块,尽管它们广泛使用-但被误导-与Active目录提供商-请参见this answer

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

但是,如果可行,始终应首选使用-Filter ,因为它会在源头过滤 ,这意味着提供者已返回了-将结果过滤到PowerShell(相对于事后必须在PowerShell代码中过滤结果),可以大大加快操作速度