PowerShell通配符是否支持‘或’功能?能否匹配mkv或mp4文件?
能否用Get-ChildItem的通配符匹配mkv或mp4文件?
直接通过-Filter参数的通配符实现**“或”逻辑匹配**是不可行的,原因如下:
-Filter的规则限制-Filter依赖Windows底层的FindFirstFileAPI实现文件过滤,它的通配符规则和PowerShell原生语法不同,不支持逻辑“或”操作,也不支持你尝试的[*mkv][*mp4]这类写法——方括号在-Filter的通配符里仅用于匹配单个字符的范围(比如[abc]匹配a、b、c中的任意一个),完全不是你想要的分组或逻辑。你写的那些写法本质上是在匹配包含特定单个字符的文件名,自然找不到目标文件。可行的替代通配符方案
如果你不想用-match或Where-Object,可以改用-Include参数,它支持PowerShell原生的多通配符列表,实现“或”匹配:# 匹配c:/temp下的mkv和mp4文件(路径末尾加*确保只查当前目录) Get-ChildItem -Path 'c:/temp/*' -File -Include *.mkv,*.mp4或者如果需要递归查找,也可以去掉路径末尾的
*,加上-Recurse参数:Get-ChildItem -Path 'c:/temp' -File -Include *.mkv,*.mp4 -Recurse
总结:-Filter参数的通配符无法实现“或”匹配,必须用-Include(或你知道的-match/Where-Object)来完成需求。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

