我正在构建一个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
}
}
任何帮助将不胜感激。
答案 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代码中过滤结果),可以大大加快操作速度。