You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell Get-ChildItem过滤*.txt时匹配*.txt~的问题及解决

PowerShell 5.1中精确匹配.txt结尾文件,排除.txt~备份文件的方法

问题原因

为什么-Filter "*.txt"会匹配.txt~文件

Get-ChildItem(别名ls)的-Filter参数使用的是Windows Shell的文件系统过滤规则,而非PowerShell原生通配符或正则表达式:

  • Windows的过滤逻辑中,*.txt会匹配所有文件名里最后一个.后以txt开头的内容,.txt~的扩展名被识别为txt~,因此会被纳入匹配结果。

为什么-Filter "*.txt$"无结果

-Filter不支持正则表达式的锚定符$,它会将$视为普通字符,系统会尝试查找文件名以.txt$结尾的文件,自然没有匹配项。

解决方法

方法1:使用-Include参数(PowerShell原生通配符)

-Include采用PowerShell自身的通配符规则,*.txt会精确匹配文件名以.txt结尾的文件:

# 当前目录下查询
Get-ChildItem .\* -Include "*.txt"

# 指定路径查询
Get-ChildItem C:\so_example\* -Include "*.txt"

注意:如果不使用\*指定路径下的所有项,-Include参数不会生效(除非搭配-Recurse)。

方法2:用Where-Object过滤

通配符匹配

Get-ChildItem | Where-Object { $_.Name -like "*.txt" }

正则表达式匹配

Get-ChildItem | Where-Object { $_.Name -match "\.txt$" }

这种方式灵活性更高,可根据需求调整匹配规则。

方法3:结合-Filter与排除规则

如果习惯用-Filter,可以先获取初步匹配结果,再排除备份文件:

Get-ChildItem -Filter "*.txt" | Where-Object { $_.Name -notlike "*~" }

内容的提问来源于stack exchange,提问作者Stassa Patsantzis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:43:26