有没有一种简单的方法(不使用循环)将多个模式应用于一个字符串?
所以
"c:\myfile.txt" -like "*.dat","*.txt"
应该返回 $true
"c:\myfile.dat" -like "*.dat","*.txt"
应该返回 $true
"c:\myfile.doc" 类似 " .dat",". txt"
应该返回 $false
有没有一种简单的方法(不使用循环)将多个模式应用于一个字符串?
所以
"c:\myfile.txt" -like "*.dat","*.txt"
应该返回 $true
"c:\myfile.dat" -like "*.dat","*.txt"
应该返回 $true
"c:\myfile.doc" 类似 " .dat",". txt"
应该返回 $false
我不这么认为。您可以使用正则表达式:
"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
您可以尝试使用-match
,而不是在-like
这里:
"c:\myfile.txt" -match "\.(dat|txt)$" ==> True
"c:\myfile.dat" -match "\.(dat|txt)$" ==> True
"c:\myfile.doc" -match "\.(dat|txt)$" ==> False