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

如何使用PowerShell更新CSV文件中已有条目的指定单元格值

问题分析与解决

你的代码报错的核心问题是没有正确捕获CSV中匹配的对象就尝试直接修改属性。Where({$_.'Object Name' -eq $object})单独使用时没有输入对象源,PowerShell无法定位到要修改的条目。另外还要注意处理Times Flagged的数值类型转换,以及最后将修改后的内容写回CSV文件。

修正后的完整脚本

$listFile = Get-Content "\\File Path\Test List.txt"
$csvFile = Import-Csv -Path '\\File Path\Test Report.csv'
$Now = [datetime]::Now.ToString("yyyy-MM-dd HH:mm:ss") # 统一日期格式,避免区域差异

foreach($object in $listFile) {
    # 捕获匹配的CSV条目
    $existingEntry = $csvFile | Where-Object { $_.'Object Name' -eq $object }
    
    if($existingEntry) {
        # 更新日期
        $existingEntry.'Date Last Flagged' = $Now
        # 将Times Flagged转为整数后加1,再存回
        $existingEntry.'Times Flagged' = [int]$existingEntry.'Times Flagged' + 1
    }
    else {
        # 添加新条目,初始化Times Flagged为1,日期为当前时间,Notes留空
        $newEntry = [PSCustomObject]@{
            'Object Name' = $object
            'Times Flagged' = 1
            'Date Last Flagged' = $Now
            'Notes' = ''
        }
        $csvFile += $newEntry
    }
}

# 将修改后的内容写回CSV文件,-NoTypeInformation避免添加多余类型信息
$csvFile | Export-Csv -Path '\\File Path\Test Report.csv' -NoTypeInformation -Encoding UTF8

关键修改点说明

  • 捕获匹配对象:用$existingEntry变量接收Where-Object的结果,才能直接定位并修改目标条目的属性,避免原代码中无输入源的无效Where调用。
  • 统一日期格式:将$Now转换为固定格式的字符串(如yyyy-MM-dd HH:mm:ss),避免不同系统区域设置导致的日期显示/解析异常。
  • 处理数值类型:Import-Csv会将所有CSV列解析为字符串,因此需要先把Times Flagged转为[int]类型再执行自增操作,防止出现字符串拼接错误(例如原数值为"2"时,直接加1会变成"21"而非3)。
  • 保存修改结果:最后通过Export-Csv将内存中修改后的$csvFile数组写回原文件,否则所有修改仅停留在内存中,不会持久化到磁盘。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:15:01