Windows环境下PowerShell获取文件名末尾为数字的文件列表问题
解决PowerShell筛选文件名末尾为数字的ZIP文件问题
问题原因
PowerShell的Get-ChildItem参数-Filter依赖Windows原生文件系统筛选器,其通配符规则和资源管理器/CMD的DIR命令存在差异,导致*1.zip这类筛选无法按预期匹配文件名末尾为数字的文件。而*.zip能正常工作是因为这是最基础的扩展名筛选,符合原生筛选器的处理逻辑。
可行解决方案
方案1:结合Where-Object与字符串方法(直观易读)
先获取所有ZIP文件,再筛选文件名(不含扩展名)末尾为指定数字的文件:
# 筛选所有末尾为数字的ZIP文件 $filesToMove = Get-ChildItem -Path $sourceFolder -File -Filter "*.zip" | Where-Object { $_.BaseName -match '\d$' } # 筛选末尾为2的ZIP文件(对应示例中的FileNumber5932.zip) $filesToMove = Get-ChildItem -Path $sourceFolder -File -Filter "*.zip" | Where-Object { $_.BaseName.EndsWith('2') }
方案2:使用正则表达式精确匹配文件名
直接匹配完整文件名的末尾是数字+.zip的格式:
# 筛选所有末尾为数字的ZIP文件 $filesToMove = Get-ChildItem -Path $sourceFolder -File | Where-Object { $_.Name -match '\d\.zip$' } # 筛选末尾为2的ZIP文件 $filesToMove = Get-ChildItem -Path $sourceFolder -File | Where-Object { $_.Name -match '2\.zip$' }
方案3:使用-Include参数(简化写法)
注意-Include需要搭配路径末尾的\*或-Recurse参数才能生效:
# 筛选所有末尾为数字的ZIP文件 $filesToMove = Get-ChildItem -Path "$sourceFolder\*" -File -Include "*[0-9].zip" # 筛选末尾为2的ZIP文件 $filesToMove = Get-ChildItem -Path "$sourceFolder\*" -File -Include "*2.zip"
验证效果
针对你提供的文件列表:
FileNumber1796.zip
FileNumber2021.zip
FileNumber5932.zip
FileNumber4369.zip
FileNumber1615.zip
使用筛选末尾为2的命令后,只会返回FileNumber5932.zip,符合需求。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

