PowerShell检查CSV指定列是否为空并替换为其他列值
代码问题排查与修复
原代码错误点
- 变量名不匹配:遍历变量定义为
$item,赋值时错误调用未声明的$line变量,取值失败 - 逻辑冗余:无需额外定义哈希表存储数据,
Import-Csv返回的对象集合可直接修改属性 - 导出参数错误:输入文件为逗号分隔,导出时误将分隔符设为分号
;,导致输出格式不符
修复后代码
$csvFile1 = Import-Csv -Path "D:\AA_servers.txt" -Delimiter "," foreach ($item in $csvFile1) { if ([string]::IsNullOrEmpty($item.Header2)) { $item.Header2 = $item.Header3 } } $csvFile1 | Export-Csv -Path "D:\AA_servers.txt" -Delimiter "," -NoTypeInformation -Encoding UTF8
效果说明
运行后会自动识别Header2为空的行,将对应行Header3的值写入Header2,其余行保持不变,完全符合预期输出要求。如果Header2为空同时Header3也为空,赋值后仍保持为空,和示例中ASD行的处理逻辑一致。
如果需要去掉输入文件末尾多余逗号产生的空列,可将导出语句修改为:
$csvFile1 | Select-Object Header1,Header2,Header3 | Export-Csv -Path "D:\AA_servers.txt" -Delimiter "," -NoTypeInformation -Encoding UTF8
内容的提问来源于stack exchange,提问作者majan
相关产品推荐
相关产品推荐

