PowerShell中如何让Select-String仅匹配路径列表不检索文件内容
问题根因
你直接将存储路径的$fileList变量作为位置参数传入Select-String时,该参数会被识别为-Path参数,命令默认会读取每个路径对应文件的内容进行匹配,tif是二进制文件,自然输出乱码。
解决方案1(基于Select-String实现需求)
要让Select-String匹配路径字符串本身,只需将路径数组通过管道传入命令即可,添加-Raw参数可直接输出匹配到的纯路径字符串,无需额外处理结果对象:
$fileList | Select-String -Pattern "Aug" -Raw
运行后输出结果即为你需要的:
\\server\imagery\09Aug2015\506000_6717000.tif
更推荐的简化方案
如果仅做简单的路径过滤,直接用Where-Object逻辑更直观,无需理解Select-String的参数差异:
# 正则匹配 $fileList | Where-Object { $_ -match 'Aug' } # 通配符匹配(无正则规则时更易用) $fileList | Where-Object { $_ -like '*Aug*' }
之前尝试参数无效的原因
你之前测试的-Raw/-SimpleMatch/-Path等参数都没有改变“读取文件内容匹配”的逻辑:
-Path参数的作用就是指定要读取内容的目标文件-SimpleMatch仅是将匹配模式从正则表达式改为普通字符串匹配-Raw是让Select-String直接返回匹配到的字符串而非MatchInfo对象,只有配合管道输入字符串时才会作用于路径本身
内容的提问来源于stack exchange,提问作者matt wilkie
相关产品推荐
相关产品推荐

