更改数据并将其添加到CSV文件

时间:2019-02-21 11:43:12

标签: powershell csv

我有一个应在CSV文件中查找并对其进行修改的脚本。 我的文件如下:

"mydata","module1","module2","module3","module4","module5"
"kk-ll","module1","","module3","",""
"kk-pp","module1","","module3","",""  

如果mydata列中的数据存在:请修改$Module列中的值。
如果不存在,请执行以下操作:在文件中添加新行。

我为第一部分编写的代码还可以,对于第二部分(更新文件),它不起作用。

$ExistingCSV = Import-Csv MyCsv.csv
if ($ExistingCSV.mydata -eq "$LOT-$WID") {
    $ExistingCSV | ForEach-Object {
        if ($_.mydata -eq "$LOT-$WID") {
            $_.$Module = $Module
        }
    }

    $ExistingCSV | Export-Csv $ProgressLogPath\$LOT.csv -NoTypeInformation
} else {
    $ExistingCSV.mydata = "$LOT-$WID"
    $ExistingCSV.$Module = $Module
    Add-Content $ExistingCSV -Value $_.Lot_WaferID $_.$Module $_.ScriptLogPath

    $ExistingCSV | Export-Csv $ProgressLogPath\$LOT.csv -NoTypeInformation
}

1 个答案:

答案 0 :(得分:2)

我将使用-contains而不是-eq,但是由于PowerShell运算符用作枚举器,因此后者在您的情况下也应适用。

如果找到匹配项,请修改现有数据并将结果导出回CSV。否则,您要做的就是使用要添加的数据创建一个自定义对象,并将其附加到CSV。

$csv = 'C:\path\to\your.csv'

$ExistingCSV = Import-Csv $csv
if ($ExistingCSV.mydata -contains "$LOT-$WID") {
    foreach ($row in $ExistingCSV) {
        if ($row.mydata -eq "$LOT-$WID") {
            $row.$Module = $Module
        }
    }
    $ExistingCsv | Export-Csv $csv -NoType
} else {
    $obj = New-Object -Type PSObject -Property @{
        'mydata'  = "$LOT-$WID"
        'module1' = $null
        'module2' = $null
        'module3' = $null
        'module4' = $null
        'module5' = $null
    }
    $obj.$Module = $Module
    $obj | Export-Csv $csv -NoType -Append
}

$null替换为moduleX字段应该具有的任何值。