我在服务器上有一个名为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是如何被包含在输出中感到困惑。我期望输出结果不会变化。
在线帮助指出筛选器语法基于提供程序,但我不确定在此实例中使用了哪个提供程序。
我是否缺少一些基础知识?我尝试将正则表达式字符串传递到筛选器中,例如 "MyFolder\.*"
,但这只返回空值。我确信我错过了一些简单的东西。
我正在运行PowerShell版本2。
解决方法
感谢Roman Kuzmin指出通配符匹配的差异。以下内容可获得预期输出:
gci C:\Sample\MyFolder.*
我将来会使用这种语法,以便在代码中减少噪音。