PowerShell中Get-ChildItem中的通配符匹配

时间:2013-04-04 21:27:27

标签: powershell

有没有办法确定如何在Get-ChildItem中完成通配符匹配?

各种文章(12)表明它是通过WildcardPattern class完成的,但我不认为是这种情况。例如,假设您在C:\test\test2\testfile.txt中有一个文件。然后Get-ChildItem –Path “C:\*\testfile.txt”将在WildcardPattern::IsMatch时找不到该文件。 Get-ChildItem中的通配符"*"匹配似乎位于目录级别:因此"\*\"永远不会匹配多个级别,例如"\A\B\"

所以,如果没有使用WildcardPattern class,那么是什么?

3 个答案:

答案 0 :(得分:1)

据我所知,它正如您所描述的那样使用WildcardPattern。但是,cmdlet Get-ChildItem将其限制为当前目录(除\之外的字符),因此它不会与进入无限级别的-Recurse开关冲突。

答案 1 :(得分:0)

要么工作:

gci c:\test\*\testfile.txt

gci c:\*\testfile.txt -recurse

示例:

PS C:\temp\test2> dir


    Directory: C:\temp\test2


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          4/4/2013  10:41 PM          0 testfile.txt


PS C:\temp\test2> cd \
PS C:\> gci c:\*\testfile.txt -recurse -ea SilentlyContinue


    Directory: C:\Temp\test2


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---          4/4/2013  10:41 PM          0 testfile.txt

答案 2 :(得分:0)

使用" C:\ * \ testfile.txt",星号只为第一级目录(例如test)起作用。您正在寻找的文件不存在,您获得的输出是预期的。为第二级添加另一个星号,您将获得所需的输出(例如" C:\ * \ * \ testfile.txt")。您还可以添加Recurse开关,从当前位置开始向下搜索。