3

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

所以

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

应该返回 $true

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

应该返回 $true

"c:\myfile.doc" 类似 " .dat",". txt"

应该返回 $false

4

2 回答 2

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
于 2012-10-17T18:47:04.690 回答
1

您可以尝试使用-match,而不是在-like这里:

"c:\myfile.txt" -match "\.(dat|txt)$" ==> True
"c:\myfile.dat" -match "\.(dat|txt)$" ==> True
"c:\myfile.doc" -match "\.(dat|txt)$" ==> False
于 2012-10-17T18:46:31.583 回答