在PSv3+中,但在PowerShell Core v6.x中无法使用,已在v7中修复(参见
此GitHub问题):
Get-ChildItem -File -Filter *.
-File
仅限输出文件(不包括目录)。
-Filter *.
选择没有扩展名的文件。
-Filter
通常比 -Include
/ -Exclude
更可取,因为它在源头处进行过滤,而不是返回所有对象并让 PowerShell 进行过滤,从而提高性能。
在 PSv2 中,如果没有 -File
开关,你需要使用额外的 Where-Object
调用来限制结果为文件,如 TheIncorrigible1 所指出的:
Get-ChildItem -Filter *. | Where-Object { -not $_.PSIsContainer }
较慢的 PowerShell Core 解决方案:
Get-ChildItem -File | Where-Object -Not Extension
可选的背景信息:
-Filter
参数由底层提供程序处理,而不是 PowerShell 处理,这意味着它的行为可能与 PowerShell 的不同,事实上在此处确实如此:FileSystem 提供程序使用 Windows API 通配符表达式匹配,其功能比 PowerShell 的少且具有一些历史怪癖;此外,它仅限于单个通配符表达式,而 -Include
/ -Exclude
支持多个(用 ,
分隔)。
然而,在此处,-Filter
提供了 PowerShell 通配符匹配不具备的功能:使用 *.
匹配无扩展名的文件/目录。
-Include
/ -Exclude
通常以功能优先,性能为代价,但它们也有自己的限制和怪癖:
简而言之:
-Include
/
-Exclude
在这里无法提供解决方案。