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

标签 powershell filter get-childitem

我在名为 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/

相关文章:

powershell-2.0 - 将文件复制到 lastwritetime -ge 3/26/2010 9 :00pm with Powershell

object - powershell 扩展一个对象

java - 如何使用 JPA 分页应用基于 java 的过滤器?

javascript - 根据数字数量输入过滤 div

regex - PowerShell:在两个单词之间查找文本

Powershell:捕获组合输出,仅错误输出,将组合输出发送到控制台

javascript - 如何在 Ext JS Grid 3.2 的列标题中添加过滤器选择器

powershell - 如何在powershell中返回具有相同扩展名但包含特定名称结尾的文件?

powershell - 修剪Powershell中的最后8个字符

c# - 在 PowerShell 中迭代多行数据