Powershell 全局模式匹配

cyn*_*n77 7 windows powershell glob

我正在查找C:\ProgramFiles名为 的 jar 文件log4j-core-x.y.z.jar。我试图匹配最后一位数字z,它可以是一位数也可以是两位数(0-99)。我似乎无法获得正确的全局模式来完成此任务。

Code:

PS C:\Users\Administrator> Get-ChildItem -Path 'C:\Program Files\' -Filter log4j-core-*.*.[1-9][0-9].jar -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName}
Run Code Online (Sandbox Code Playgroud)

这不会产生任何结果,但是当我只执行所有通配符时,如 ,-Filter log4j-core-*.*.*.jar我得到:

C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0-javadoc.jar
C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0-sources.jar
C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0-tests.jar
C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0.jar
Run Code Online (Sandbox Code Playgroud)

我唯一关心的是C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0.jarlog4j-core-2.16.0.jar

San*_*zon 5

-Filter不支持使用正则表达式字符范围(例如[A-Z]或 )进行过滤[0-9]。感谢mklement0指出这一点。

从官方文档的参数描述来看Get-ChildItem

过滤器字符串被传递到 .NET API 以枚举文件。API 仅支持*?通配符。

尝试用这个:

$getChildItemSplat = @{
    Path        = 'C:\Program Files\'
    Filter      = 'log4j-core-*.*.??.jar'
    Recurse     = $true
    ErrorAction = 'SilentlyContinue'
    Force       = $true
}

Get-ChildItem @getChildItemSplat |
    # Ends with a . followed by 1 or 2 digits and the .jar extension
    Where-Object Name -Match '\.\d{1,2}\.jar$'
Run Code Online (Sandbox Code Playgroud)