具有特定文件扩展名的 Powershell 过滤器文件名

Powershell filter filenames with specific file extension

我正在开发一个 Powershell 脚本,该脚本将 return 基于过滤的一组名称和特定扩展名的文件列表,在本例中为 .pdf 扩展文件类型。我目前在 foreach 控制结构中设置了这个。

到目前为止我已经这样做了:

$MechDWGFilterList = @('*ifc*','*mech*', '*permit*', '*final*', '*CD*')
$MechDWGFile = @()

# $MechDWGFolder contains 1 or more filtered full path files
$MechDWGList = Get-ChildItem -Path $MechDWGFolder -Filter *.pdf -r | Sort-Object -Descending -Property LastWriteTime 

$count = 0
foreach ($file in $MechDWGList)
{
    # Where the file name contains one of these filters
    foreach($filter in $MechDWGFilterList)
    {
        if($file.Name -like $filter)
        {           
            $MechDWGFile += $file
            $count += 1
        }
    }
}

但我想压缩如下所示的内容,这样我就可以避免从上面的代码中创建一个额外的对象 $MechDWGFile

$MechDWGFilterList = @('*ifc*','*mech*', '*permit*', '*final*', '*CD*')
$MechDWGFilterList2 = 'ifc|mech|permit|final|CD' #Tried this regex expression as well

$MechDWGList = Get-ChildItem -Path $MechDWGFolder -Filter ($MechDWGFilterList).pdf -r | Sort-Object -Descending -Property LastWriteTime 
Write-Output $MechDWGList

我觉得我很接近,除非没有迭代控制循环这是完全不可能的。帮助理解这一挑战将不胜感激!

一些其他背景参考信息:PowerShell 5.1 正在用作管理员,Windows 10 OS

-Filter 仅支持 *? 通配符。在这种情况下,您可以将 Get-ChildItem 的结果通过管道传输到 Where-Object 以进行过滤:

$MechDWGList = Get-ChildItem -Path $MechDWGFolder -Filter *.pdf -r |
    Where-Object { $_.Name -match 'ifc|mech|permit|final|CD' } |
    Sort-Object -Descending -Property LastWriteTime 

这基本上就像使用 foreach 循环和 if 条件一样:

$MechDWGList = & {
    foreach($file in Get-ChildItem -Path $MechDWGFolder -Filter *.pdf -r) {
        if($file.Name -match 'ifc|mech|permit|final|CD') { $file }
    }
} | Sort-Object -Descending -Property LastWriteTime