PowerShell脚本删除CSV含特定关键词行:行合并问题求助
解决PowerShell删除CSV行后内容合并的问题
嘿,这个问题我熟!你遇到的行合并问题,本质是因为你把所有保留的行都拼进了一个没有换行符的字符串里,最后输出的时候自然就挤成一整行了。咱们来一步步解决它:
问题根源分析
你原来的代码里,$newLine += $line只是把每行的文本内容直接拼接在一起,完全没保留原始的换行符。CSV文件的行结构依赖换行符来区分记录,没了它,所有内容自然就变成一行了。
最优解决方案(更简洁高效)
PowerShell本来就擅长处理管道和集合,完全不用手动拼接字符串。直接用Get-Content读取行数组,再用Where-Object过滤掉目标行,最后输出即可:
$user = 'User2' # 读取文件并过滤掉包含指定关键词的行 $filteredContent = Get-Content -Path "c:\datei.txt" | Where-Object { $_ -notmatch $user } # 将过滤后的内容写回文件,自动保留换行结构 $filteredContent | Out-File -Path "c:\datei.txt"
为什么这个方法更好?
Get-Content默认会把文件按行拆分成字符串数组,每一行都是数组的一个元素Where-Object直接筛选出不匹配关键词的行,逻辑清晰Out-File会自动给每个数组元素(也就是每一行)加上正确的换行符,完美保留CSV的原始行结构
如果你坚持要用foreach循环(修正版)
要是你习惯用foreach的写法,那记得用数组来收集行,而不是拼接字符串(数组比字符串拼接高效得多):
$user = 'User2' $file = Get-Content -Path "c:\datei.txt" $newLines = @() # 初始化一个空数组来存保留的行 foreach($line in $file){ # 只保留不包含关键词的行 if($line -notmatch $User){ $newLines += $line } } # 数组输出时,Out-File会自动处理换行 $newLines | Out-File -Path "c:\datei.txt"
额外提醒:编码问题
如果你的CSV文件有特定编码要求(比如UTF-8带BOM),可以给Out-File加上-Encoding参数,避免乱码:
$filteredContent | Out-File -Path "c:\datei.txt" -Encoding UTF8
内容的提问来源于stack exchange,提问作者SysCrasher
相关产品推荐
相关产品推荐

