我有一个应在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
}
答案 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字段应该具有的任何值。