Powershell 如何使用Get ChildItem返回不带';我没有分机吗?
我想得到一个没有文件扩展名的文件列表。考虑我的目录的内容:Powershell 如何使用Get ChildItem返回不带';我没有分机吗?,powershell,get-childitem,Powershell,Get Childitem,我想得到一个没有文件扩展名的文件列表。考虑我的目录的内容: folder file1 file2.mp4 我的目标是只获取file1 运行Get ChildItem-Exclude*.-File时未返回任何内容 运行Get ChildItem-Exclude*返回folder和file1 运行getchilditem-File返回file1和file2.mp4 是否有任何方法可以使用Get ChildItem在PSv3+中仅返回file1?,但在PowerShell Core v6.x中不起作
folder
file1
file2.mp4
我的目标是只获取file1
运行Get ChildItem-Exclude*.-File
时未返回任何内容
运行Get ChildItem-Exclude*
返回folder
和file1
运行getchilditem-File
返回file1
和file2.mp4
是否有任何方法可以使用Get ChildItem在PSv3+中仅返回
file1
?,但在PowerShell Core v6.x中不起作用,在v7中已修复(请参阅):
仅将输出限制为文件(与目录相反)-File
只选择那些没有扩展名的文件-Filter*
-Filter
通常优于-Include
/-Exclude
,因为它在源位置进行过滤,而不是返回所有对象并让PowerShell进行过滤
在PSv2中,如果-File
开关不可用,则需要额外的where Object
调用以将结果限制为文件,如下所述:
Get-ChildItem -Filter *. | Where-Object { -not $_.PSIsContainer }
较慢的PowerShell核心解决方案:
Get-ChildItem -File | Where-Object -Not Extension
可选背景信息: 一个
-Filter
参数是由底层提供程序处理的,而不是由PowerShell处理的,这意味着它的行为可能不同于PowerShell,这里的情况确实如此:文件系统提供程序使用Windows API的通配符表达式匹配,与PowerShell相比,它的功能更少,而且有一些历史怪癖;此外,它仅限于一个通配符表达式,而-Include
/-Exclude
支持多个通配符表达式(用分隔,
)
然而,在这里,-Filter
提供了PowerShell的通配符匹配所没有的功能:使用*。
匹配没有扩展名的文件/目录
-包括
/-排除
通常以牺牲性能为代价提供功能优势,但它们有自己的局限性和怪癖:
不支持在中匹配没有扩展名的项,而且据我所知,没有基于通配符的方法来实现这一点*。
/-Include
对指定或隐含路径的最后一个组件进行操作,因此,如果您隐含地以当前目录为目标,则它们将应用于该目录路径,而不是其中的单个文件-Exclude
- 指定
会更改此设置,但会搜索整个目录子树-Recurse
- 虽然您应该能够添加
以限制与直接子项的匹配,同时仍然能够应用-Depth 0
/-Include
,但从Windows PowerShell v5.1开始,这一点就被打破了:在这种情况下,-Exclude
参数被忽略。-Depth
但是,此问题已在PowerShell Core中修复
- 指定
-Include
/-Exclude
此处不提供任何解决方案
Get-ChildItem -File | Where-Object -Not Extension