2013-04-04 36 views
1

有沒有一種方法可以確定在Get-ChildItem中如何完成通配符匹配?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,那麼是什麼?

+0

它會,如果你使用-recurse – 2013-04-05 02:45:48

+1

@Adil不,它不會... – 2013-04-05 07:08:28

回答

1

從我所知道的情況來看,它正如你所描述的那樣使用WildcardPattern。但是,cmdlet Get-ChildItem將其限制爲當前目錄(除\之外的字符),因此它不會與-Recurse交換機發生衝突,而該交換機將轉至無限級別。

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 
+1

這是不正確的。如果您不確定,請在發帖之前進行測試。 – 2013-04-05 07:11:48

+0

@達沃其實,我在發佈前測試過他們。但是,在第一個例子的格式化過程中,「\ s」已經消失了,這個例子基於asker的目錄結構。 – 2013-04-06 01:59:15

+0

@adii'gci c:\ test \ * \ testfile.txt'正如我在問題中所說的那樣工作,因爲'*'僅限於一個目錄級別。 'gci c:\ * \ testfile.txt -recurse'不。它顯然在你的情況下工作的事實使得它更奇怪。無論如何,主要問題(即使用什麼模式匹配)仍然沒有答案。 – 2013-04-06 07:32:23

0

隨着 「C:\ * \ TESTFILE.TXT」,星號起到了重要作用只是爲第一級目錄(例如測試)。你正在尋找的文件不在那裏,你得到的輸出是預期的。爲第二級添加另一個星號,您將得到所需的輸出(例如「C:\ * \ * \ testfile.txt」)。您也可以添加Recurse開關,以開始從當前位置開始搜索,一直向下搜索。