2012-10-17 91 views
3

是否有一種簡單的方法(不使用循環)將多個模式應用於一個字符串?-like like multiple patterns

所以

"c:\myfile.txt" -like "*.dat","*.txt" 

應該返回$真

"c:\myfile.dat" -like "*.dat","*.txt" 

應該返回$真

「C:\ myfile.doc」 般的 「.DAT」,」.txt「

應該返回$假

回答

2

我不這麼認爲。你可以使用正則表達式:

"c:\myfile.txt" -match '^.+\.(dat|txt)$' 

UPDATE

建立從輸入包含通配符模式正則表達式模式:

PS> $or = '"*.dat","*.txt","*.foo"' -replace '"|\*\.' -replace ',','|' 
    PS> $pattern = '^.+({0})$' -f $or 
    PS> $pattern 
    ^.+(dat|txt|foo)$ 

    $string -match $pattern 
+0

可惜的是,這是我如何得到這些字符串從腳本的輸入參數 - * .dat「,」*。txt。它是字符串數組。所以我想foreach是我唯一的選擇嗎? – mishkin

+0

您可以處理輸入並製作一個正則表達式模式。查看更新的答案。 –

1

您可以嘗試使用的-match代替-like這裏:

"c:\myfile.txt" -match "\.(dat|txt)$" ==> True 
"c:\myfile.dat" -match "\.(dat|txt)$" ==> True 
"c:\myfile.doc" -match "\.(dat|txt)$" ==> False