求助:使用PowerShell替换CSV中指定行的目标字符串
问题解决:PowerShell批量替换CSV指定行内容
你的代码存在两个核心问题:
- 语法错误:
ForEach-Object需要用大括号{}包裹处理逻辑,而非小括号() - 逻辑缺失:只处理了包含"MAHLE AM GmbH"的行,未保留不匹配的行,会导致输出文件丢失原有的非MAHLE条目
修正后的代码
Get-Content "C:\Users\SvcBI\Documents\Autodoc\Autodoc_Temp.csv" | ForEach-Object { # 判断当前行是否包含目标字符串 if ($_ -match "MAHLE AM GmbH") { # 仅替换该行中最后一列的"4543"为"287"(引号确保精准匹配) $_ -replace '"4543"', '"287"' } else { # 不匹配的行直接保留原内容 $_ } } | Set-Content "C:\Users\SvcBI\Documents\Autodoc\POWERMAX_DK_2.csv"
更简洁的写法(用PowerShell三元运算符)
Get-Content "C:\Users\SvcBI\Documents\Autodoc\Autodoc_Temp.csv" | ForEach-Object { $_ -match "MAHLE AM GmbH" ? ($_ -replace '"4543"', '"287"') : $_ } | Set-Content "C:\Users\SvcBI\Documents\Autodoc\POWERMAX_DK_2.csv"
关键说明
- 替换时加上引号
"4543"是为了避免误替换行中其他位置可能出现的相同数字,确保只修改最后一列的目标值 - 保留不匹配的行保证输出文件和原文件的行数一致,不会丢失数据
内容的提问来源于stack exchange,提问作者Kim Jensen
相关产品推荐
相关产品推荐

