gpt4 book ai didi

Powershell Get-ChildItem -Filter 与具有相同值的 Where 子句的操作不同

转载 作者:行者123 更新时间:2023-12-04 00:42:34 24 4
gpt4 key购买 nike

我在名为 MyFolder 的服务器上有一个文件夹。还有其他文件夹称为 MyFolder.1、MyFolder.2、MyFolder.3 等。

如果我运行:

gci C:\Sample | ? { $_.Name -like "MyFolder.*" }

我得到预期的输出:
    Directory: C:\Sample


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 16/10/2012 12:16 MyFolder.1
d---- 16/10/2012 12:16 MyFolder.2
d---- 16/10/2012 12:16 MyFolder.3

但是,如果我运行:
gci C:\Sample -Filter "MyFolder.*"

我得到:
    Directory: C:\Sample


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 16/10/2012 12:16 MyFolder
d---- 16/10/2012 12:16 MyFolder.1
d---- 16/10/2012 12:16 MyFolder.2
d---- 16/10/2012 12:16 MyFolder.3

我很困惑 我的文件夹 包含在输出中。我希望输出是相同的。

online help强调过滤器的语法基于提供者,但我不确定在这个实例中使用的是什么提供者。

我在这里错过了基本知识吗?我试图将正则表达式字符串传递给过滤器,例如 "MyFolder\.*"但这只是什么都不返回。我确定我错过了一些简单的东西。

我正在运行 Powershell 版本 2。

解析度

感谢 Roman Kuzmin 指出通配符匹配的差异。以下给出了预期的输出:
gci C:\Sample\MyFolder.*

我将在将来轻松使用此语法以减少代码中的噪音。

最佳答案

Filter文件系统提供程序的使用 CMD 通配符而不是 PowerShell 通配符。 CMD 通配符在某些边缘情况下很有趣且不直观,主要是在历史上。这是一个有趣的解释:https://devblogs.microsoft.com/oldnewthing/20071217-00/?p=24143
另一个需要牢记的问题:ls -Filter *.txt实际上得到类似 *.txt* 的文件在 PowerShell 意义上,即具有扩展名的文件 开始 与 txt。在某些情况下,这可能出乎意料且非常令人不快:)

关于Powershell Get-ChildItem -Filter 与具有相同值的 Where 子句的操作不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12913734/

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