Powershell Get-ChildItem 扩展(非 * 或?)通配符

Powershell Get-ChildItem extended (non * or ?) wildcard

我对 Get-ChildItem 使用 * 作为通配符没有问题,但我想知道它是否可以与更精致的通配符一起使用。给定一个像 C:\Folder\journal.0001.txt 这样的文件,我想使用通配符 C:\Folder\journal.####.txt 来获取所有“常规”日志文件,但跳过以这种格式 journal.0000.worker1.log 命名的文件。在路径中使用通配符会引发路径不存在的错误,并且用简单的 * 替换文件位并且使用 journal.####.txt 作为过滤器或包含不起作用。 我确实看到 journal.????.txt 有效,但如果它存在,它可能会占用 journal.ABCD.txt。我什至还没有开始玩角色集。

与 RegEx 通配符模式相比具有有限的元字符集,并且没有我所知道的量词,它确实支持如下字符范围:

Get-ChildItem C:\temp-11-21\journal.[0-9][0-9][0-9][0-9].txt

奇怪的是,这仅作为路径的一部分起作用。当指定为 -Filter-Include.

的参数时,它似乎不起作用

about_Wildcards

如果需要更大的灵活性,您可以 post 使用 Where-Object 或使用 RegEx 的 For-EachObject 循环过滤文件。

我有一个已保存的 link,它与 -Include-Exclude 讨论问题。我到达那里是因为我在过滤方面遇到了问题,并且自从我为此目的使用 Where-Object 以来。我不知道是否有更紧凑的方法来做到这一点,但我是这样使用多参数文件搜索的:

Get-ChildItem ... |
Where-Object {$_.Extension -in $FileExtensionIN -or $FileExtensionIN.Count -eq 0} |
Where-Object {$_.Extension -notin $FileExtensionNOTIN -or $FileExtensionNOTIN.Count -eq 0} |
Where-Object {$_.Name -match $FileNameMATCH -or $FileNameMATCH -eq ""} |
Where-Object {$_.Name -notmatch $FileNameNOTMATCH -or $FileNameNOTMATCH -eq ""} |
...

它并不紧凑,但至少也不神秘。