- 有多种模式

时间:2012-10-17 18:40:51

标签: powershell powershell-v2.0

是否有一种简单的方法(不使用循环)将多个模式应用于一个字符串?

所以

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

应该返回$ true

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

应该返回$ true

  

“c:\ myfile.doc”-like“ .dat”,“ .txt”

应该返回$ false

2 个答案:

答案 0 :(得分:2)

我不这么认为。你可以使用正则表达式:

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

更新

从包含通配符模式的输入创建正则表达式模式:

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

   $string -match $pattern

答案 1 :(得分:1)

您可以尝试使用-match代替-like

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