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.jar,log4j-core-2.16.0.jar
-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)
| 归档时间: |
|
| 查看次数: |
7064 次 |
| 最近记录: |