You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本-not与-like文件过滤异常:good_out为空排查

问题排查:PowerShell文件过滤脚本异常分析与修复

需求与异常情况

功能需求

  • 读取game_tiles.csv(游戏标题列表)与negative_phrases.csv(短语列表)
  • 游戏标题包含短语列表中任意短语 → 写入test_good.csv
  • 游戏标题不含任何列表短语 或 包含"Pickels" → 写入test_bad.csv(含"Pickels"的记录直接归入bad组)

示例预期

The Pickels Game → 含"Pickels" → 写入test_bad.csv
The Moon Game → 含短语"Moon" → 写入test_good.csv
The Red Unicorn Ultra Game → 含短语"Red Unicorn" → 写入test_good.csv
The Red Unicorn Pickles Game → 含"Pickels" → 写入test_bad.csv

异常表现

脚本能过滤含"Pickels"的记录,但所有不含"Pickels"的记录都被写入test_bad.csv,test_good.csv为空。

错误原因分析

原脚本存在3个核心逻辑问题:

  1. 对象与字符串混淆:Import-Csv返回的是自定义对象(每行对应一个对象,列是属性),直接用$tagRecord -like $iniRecord比较两个对象永远不会匹配
  2. 短语匹配缺少通配符:即使取到列值,也需要用通配符包裹短语,才能判断标题包含该短语,而非完全相等
  3. 含"Pickels"的记录未归入bad组:原脚本仅跳过这类记录,未将其添加到nonMatchingRecords中

修正后的脚本

注:假设game_tiles.csv的标题列名为Title,negative_phrases.csv的短语列名为Phrase,请根据实际CSV结构调整列名

# 读取CSV文件(注意:需根据实际列名调整属性名)
$gameTitles = Import-Csv "game_tiles.csv"
$filterPhrases = Import-Csv "negative_phrases.csv"

# 初始化输出数组
$goodRecords = @()
$badRecords = @()

# 遍历每个游戏标题记录
foreach ($titleRecord in $gameTitles) {
    # 提取标题字符串(替换为实际CSV中的列名,比如Title)
    $title = $titleRecord.Title.Trim()

    # 规则1:含"Pickels"直接归入bad组
    if ($title -like "*Pickels*") {
        $badRecords += $titleRecord
        continue
    }

    $isMatched = $false
    # 遍历短语列表,检查标题是否包含任意短语
    foreach ($phraseRecord in $filterPhrases) {
        # 提取短语字符串(替换为实际CSV中的列名,比如Phrase)
        $phrase = $phraseRecord.Phrase.Trim()
        # 用通配符匹配:标题包含该短语
        if ($title -like "*$phrase*") {
            $goodRecords += $titleRecord
            $isMatched = $true
            break
        }
    }

    # 规则2:未匹配到任何短语,归入bad组
    if (-not $isMatched) {
        $badRecords += $titleRecord
    }
}

# 写入输出文件
$goodRecords | Export-Csv "test_good.csv" -NoTypeInformation
$badRecords | Export-Csv "test_bad.csv" -NoTypeInformation

关键修改点说明

  • 明确提取CSV的列值(而非直接操作对象),解决对象比较不匹配的问题
  • 短语匹配时用*$phrase*通配符,实现"标题包含短语"的逻辑
  • 新增含"Pickels"记录的处理分支,直接将其加入bad组
  • 变量名更具可读性,避免混淆

内容的提问来源于stack exchange,提问作者NanoNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:33:28