Neo*_*isk 5 arrays powershell sql-like
对于正在处理的每个文件,正在检查其名称以满足条件.例如,给定以下过滤器列表:
$excludeFiles = @"
aaa.bbb
ccccc.*
ddddd???.exe
"@ | SplitAndTrim;
Run Code Online (Sandbox Code Playgroud)
如果文件与任何行匹配,它应该排除处理文件.试图避免match/regex,因为这个脚本需要由不了解它的人修改,并且有几个地方需要实现它.
$excludedFiles和类似的故意定义为here-string.它允许最终用户/操作员直接从CMD/Powershell窗口粘贴一堆文件名.
似乎Powershell不接受-like数组,所以我不能这样写:
"ddddd000.exe" -like @("aaa.bbb", "ccccc.*", "ddddd???.exe")
Run Code Online (Sandbox Code Playgroud)
我错过了一个选项吗?如果它不是Powershell本身支持的,那么实现它的最简单方法是什么?
您可以针对名称集合执行模式匹配,但不能针对模式列表执行模式匹配.试试这个:
foreach($pattern in $excludeFiles)
{
if($fileName -like $pattern) {break}
}
Run Code Online (Sandbox Code Playgroud)
以下是如何将其包装到函数中:
function like($str,$patterns){
foreach($pattern in $patterns) { if($str -like $pattern) { return $true; } }
return $false;
}
Run Code Online (Sandbox Code Playgroud)
以下是接受答案中模式的简短版本:
($your_array | %{"your_string" -like $_}) -contains $true
Run Code Online (Sandbox Code Playgroud)
适用于OP中的案例获得
PS C:\> ("aaa.bbb", "ccccc.*", "ddddd???.exe" | %{"ddddd000.exe" -like $_}) -contains $true
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12076 次 |
| 最近记录: |