Powershell基于关键词数组批量过滤变量值的实现问题
PowerShell批量处理CSV变量匹配解决方案
原有逻辑问题
- 字符串是值类型,你直接把变量值存入数组后,修改数组元素不会同步更新原变量,导致匹配后赋值无效
- 逐变量判断的逻辑冗余,可通过动态操作变量简化
注意你原有代码里
$array2 = "leiter" , ""包含空字符串,会导致所有非空值都匹配到,需要把空元素删掉。
实现代码
第一步:定义匹配规则
# 匹配到就设为空的关键词数组 $blockKeywords = @("leiter", "leitung", "Sekretär") # 需要追加内容的匹配规则,键为匹配字符串,值为要追加的内容 $appendRules = @{ "Verkaufsabteilung-Inland" = "-你要追加的指定内容" } # 要处理的目标变量名列表 $targetVarNames = @("MitgliedÄndern2", "Mitgliedlesen2", "MitgliedÄndern3", "Mitgliedlesen3")
第二步:批量处理变量
把这段代码放到你原有代码中变量赋值完成的位置即可:
foreach ($varName in $targetVarNames) { $currentVal = Get-Variable -Name $varName -ValueOnly # 空值跳过处理 if ([string]::IsNullOrEmpty($currentVal)) { continue } # 匹配屏蔽关键词 $isBlocked = $false foreach ($keyword in $blockKeywords) { if ($currentVal -like "*$keyword*") { $isBlocked = $true break } } if ($isBlocked) { Set-Variable -Name $varName -Value "" continue } # 匹配追加规则 foreach ($matchStr in $appendRules.Keys) { if ($currentVal -like "*$matchStr*") { Set-Variable -Name $varName -Value ($currentVal + $appendRules[$matchStr]) break } } }
效果验证
以你示例中的赋值为例:
$MitgliedÄndern2 = "Abteilungsleiter"匹配到关键词leiter,会被设为空$Mitgliedlesen2 = "Bundesleiter"匹配到关键词leiter,会被设为空$MitgliedÄndern3 = "Mitarbeiter"无匹配关键词,保留原值$Mitgliedlesen3 = "Mitarbeiterleiter"匹配到关键词leiter,会被设为空
后续新增要处理的变量、关键词或追加规则,只需要修改对应数组/哈希表即可,不需要新增判断语句。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

