Kie*_*ies 11 powershell filter get-childitem
我在服务器上有一个名为MyFolder的文件夹.还有一些名为MyFolder.1,MyFolder.2,MyFolder.3等的文件夹.
如果我跑:
gci C:\Sample | ? { $_.Name -like "MyFolder.*" }
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出:
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
Run Code Online (Sandbox Code Playgroud)
但是如果我跑:
gci C:\Sample -Filter "MyFolder.*"
Run Code Online (Sandbox Code Playgroud)
我明白了:
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
Run Code Online (Sandbox Code Playgroud)
我对MyFolder如何包含在输出中感到困惑.我希望输出是一样的.
该在线帮助突出了过滤器的语法是基于供应商,但我不能确定在这种情况下使用什么样的供应商.
我在这里错过了一个基本的知识吗?我试图将一个正则表达式字符串传递给过滤器,"MyFolder\.*"但这只是没有返回任何内容.我确定我错过了一些简单的事情.
我正在运行Powershell版本2.
感谢Roman Kuzmin指出了通配符匹配的不同之处.以下给出了预期的输出:
gci C:\Sample\MyFolder.*
Run Code Online (Sandbox Code Playgroud)
我将来会使用这种语法来减少代码中的噪音.
Rom*_*min 12
该Filter文件系统提供的,而使用CMD通配符比PowerShell的通配符.CMD通配符很有趣,在某些边缘情况下并不直观,主要是历史性的.这是一个有趣的解释:http://blogs.msdn.com/b/oldnewthing/archive/2007/12/17/6785519.aspx
另外需要牢记的是:ls -Filter *.txt事实上,获取*.txt*PowerShell意义上的文件,即扩展名以txt 开头的文件.这可能是意料之外的,在某些情况下非常不愉快:)
gci C:\Sample -Filter "MyFolder.*" # here is a filesystem provider; use wildcard `*`,`?`
Run Code Online (Sandbox Code Playgroud)
返回与(在cmd.exe shell中)相同的输出:
dir Myfolder.*
Run Code Online (Sandbox Code Playgroud)
如果你需要一个正则表达式,这是方式(-filter不接受正则表达式)
gci C:\Sample | ? { $_.Name -match '^MyFolder\..*' }
Run Code Online (Sandbox Code Playgroud)
像这儿
gci C:\Sample | ? { $_.Name -like "MyFolder.*" }
Run Code Online (Sandbox Code Playgroud)
scriptblock中的比较是在[string]类型之间.
| 归档时间: |
|
| 查看次数: |
27826 次 |
| 最近记录: |