好的,我对PowerShell还不太新鲜。
我已经写了一段的代码,但它闻起来完全错了。从PowerShell的角度来看,写这个的正确方法是什么?
$(".tr_clone_add").on('click', function() {
$('.tr_clone').clone(false).removeClass("tr_clone").appendTo('table tbody');
});
答案 0 :(得分:2)
你可以这样做
$filters = @("a","b")
$data = @("c/a","c/b","c/a/d","e","a","e/f")
$desiredResults = @("e","e/f")
$data | Select-String -Pattern $filters -NotMatch
答案 1 :(得分:1)
正确的方法?我不知道有正确的方法。我可以使用RegEx为您提供更好的方法:
$filters = @("a","b")
$data = @("c/a","c/b","c/a/d","e","a","e/f")
$desiredResults = @("e","e/f")
$RegExFilter = ($Filters|%{[regex]::escape($_)}) -join '|'
$Results = $data | Where{$_ -notmatch $RegExFilter}
Write-Host "Desired Results" -ForegroundColor Yellow
$desiredResults
Write-Host "Results" -ForegroundColor Yellow
$results
这基本上采用$filters
数组的每个元素,对其执行正则表达式转义以转义任何特殊字符,然后将所有这些结果与管道字符连接起来。因此,在给定$RegExFilter
等于a|b
的示例中。然后它会针对与该模式匹配的任何内容过滤$data
。
答案 2 :(得分:0)
这里唯一真正的问题 - 你必须比较字符串和字符串数组,我不认为powershell可以做得很优雅(但我可能错了),所以我做到了这一点:
foreach ($d in $data)
{
if ($d -notlike $filters[0] -and $d -notlike $filters[1])
{
$results += $d
}
}
我认为语法足够干净,不需要任何解释。如果需要解释,请在评论中告诉我。
答案 3 :(得分:0)
试试这个
$data | %{$val=$_; $Nb=($filters | where {$val -like $_}).Count ; if ($Nb -eq 0) {$val} }
答案 4 :(得分:0)
我经常遇到双管道问题,所以我将其中一个切换到 ForEach。
这是一个单线。
$filters = @("*a*","*b*")
$data = @("c/a","c/b","c/a/d","e","a","e/f")
ForEach ($Item in $data) { If ( !($filters | Where-Object {$Item -like $_})) { $Item } }