有没有办法确定如何在Get-ChildItem中完成通配符匹配?
各种文章(1,2)表明它是通过WildcardPattern class完成的,但我不认为是这种情况。例如,假设您在C:\test\test2\testfile.txt
中有一个文件。然后Get-ChildItem –Path “C:\*\testfile.txt”
将在WildcardPattern::IsMatch
时找不到该文件。 Get-ChildItem中的通配符"*"
匹配似乎位于目录级别:因此"\*\"
永远不会匹配多个级别,例如"\A\B\"
。
所以,如果没有使用WildcardPattern class,那么是什么?
答案 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开关,从当前位置开始向下搜索。