PowerShell脚本使用-Include "*.pdf"未匹配特殊命名PDF文件问题
问题原因及解决办法
核心原因分析
1. -Recurse与-Include的搭配陷阱(最可能)
这是PowerShell的常见坑:当你用Get-ChildItem -Path $srcRoot -Recurse -Include "*.pdf"时,如果$srcRoot是具体目录路径(不带通配符),-Include只会过滤$srcRoot顶层目录的文件,递归遍历到的子目录里的文件不会被这个规则筛选。如果那两个文件在子目录中,自然会被漏掉。
2. 文件扩展名显示误导
如果你的系统开启了「隐藏已知文件类型的扩展名」,可能实际文件名是Thisismyfile.pdf2(扩展名是pdf2),但系统显示为Thisismyfile.pdf2.pdf,让你误以为文件名以.pdf结尾。这种情况下*.pdf肯定匹配不到。
3. 通配符逻辑澄清(排除项)
*.pdf是通配符,规则是匹配文件名以.pdf结尾的文件,而非文件名中包含.pdf的文件。你的这两个文件名最后确实是.pdf,所以这个不是问题所在。
解决办法
针对陷阱问题
- 方法一:给Path参数加通配符,让
-Include作用于所有递归文件:foreach ($file in Get-ChildItem -Path "$srcRoot\*" -File -Include "*.pdf" -Force -Recurse) { # 你的移动代码 } - 方法二:改用
-Filter参数(性能更好,递归时无需通配符路径):foreach ($file in Get-ChildItem -Path $srcRoot -File -Filter "*.pdf" -Force -Recurse) { # 你的移动代码 }
针对扩展名显示问题
打开文件资源管理器,切换到「查看」选项卡,勾选「文件扩展名」,确认文件的实际后缀。如果实际是.pdf2,可以修改脚本的匹配规则为*.pdf2.pdf,或者根据需求调整。
内容的提问来源于stack exchange,提问作者Medium Rare
相关产品推荐
相关产品推荐

