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
.
的参数时,它似乎不起作用
如果需要更大的灵活性,您可以 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 ""} |
...
它并不紧凑,但至少也不神秘。
我对 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
.
如果需要更大的灵活性,您可以 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 ""} |
...
它并不紧凑,但至少也不神秘。