gpt4 book ai didi

powershell - 如何使用 Get-ChildItem 返回没有扩展名的文件?

转载 作者:行者123 更新时间:2023-12-03 10:01:16 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to select files that have no extension using powershell

(3 个回答)


3年前关闭。




我想获取没有文件扩展名的文件列表。考虑我的目录的内容是:

folder
file1
file2.mp4

我的目标是获得 file1只要。

运行 Get-ChildItem -Exclude *.* -File什么也没回。

运行 Get-ChildItem -Exclude *.*返回 folderfile1 .

运行 Get-ChildItem -File返回 file1file2.mp4 .

知道是否有任何方法可以使用 Get-ChildItem 仅返回 file1 ?

最佳答案

PSv3+ ,但是 在 PowerShell Core v6.x 中不起作用,已在 v7 中修复 (见 this GitHub issue):

Get-ChildItem -File -Filter *.
  • -File将输出限制为仅文件(而不是目录)。
  • -Filter *.只选择那些没有扩展名的文件。
  • -Filter通常优于 -Include/ -Exclude出于性能原因,因为它在源头进行过滤,而不是返回所有对象并让 PowerShell 进行过滤。

    PSv2 ,其中 -File开关不可用,您需要额外的 Where-Object调用将结果限制为文件,如 TheIncorrigible1指出:
    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通常以牺牲性能为代价提供功能优势,但它们有自己的局限性和怪癖 :
  • *.不支持匹配 PowerShell's wildcard language 中没有扩展名的项目,并且我所知道的没有基于通配符的方法来实现这一点。
  • -Include/-Exclude对指定或隐含路径的最后一个组件进行操作,因此如果您隐式定位当前目录,则它们适用于该目录路径,而不适用于其中的单个文件。
  • 指定 -Recurse改变它,但搜索整个目录子树。
  • 虽然您应该能够添加 -Depth 0限制与直接子项的匹配,同时仍然能够应用 -Include/-Exclude ,这在 Windows PowerShell v5.1 中已被破坏:-Depth在这种情况下,将忽略参数。
    但是,此问题已在 PowerShell Core 中修复。

  • 简而言之: -Include/ -Exclude这里不提供解决方案。

    关于powershell - 如何使用 Get-ChildItem 返回没有扩展名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51718098/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com