【发布时间】:2012-10-16 11:29:55
【问题描述】:
我在名为 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
我对输出中如何包含 MyFolder 感到困惑。我希望输出是一样的。
online help 强调过滤器的语法基于提供程序,但我不确定在此实例中使用的是哪个提供程序。
我在这里缺少基本知识吗?我试图将一个正则表达式字符串传递给过滤器,例如"MyFolder\.*",但这根本不返回任何内容。我确定我错过了一些简单的东西。
我正在运行 Powershell 版本 2。
分辨率
感谢 Roman Kuzmin 指出通配符匹配的差异。以下给出了预期的输出:
gci C:\Sample\MyFolder.*
我将来会使用这种语法来减少代码中的噪音。
【问题讨论】:
-
如果 Microsoft 更新帮助以解释 -Filter 对文件系统提供程序的作用,那就太好了,因为这可能是人们使用 Get-ChildItem 的 99.9% 最常见的情况。 “语法基于提供者”似乎有点虚伪。
标签: powershell filter get-childitem