You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何移除CSV文件中的回车符(char(13))

解决PowerShell中移除CSV文件里回车符的问题

看起来你遇到的核心问题是Get-Content默认的逐行读取行为截断了换行/回车字符,导致你无法匹配到目标的char(13)(也就是r)。下面给你几个针对性的解决方案:

方案1:读取整个文件内容(推荐处理嵌入的回车符)

如果你的CSV字段中嵌入了回车符(比如SQL查询返回的文本字段包含换行),用Get-Content -Raw把整个文件当作单个字符串读取,这样就能捕获所有的回车/换行字符:

# 移除所有单独的回车符(char(13)),替换为空格
(Get-Content $MyCSV_DOR -Raw) -replace "`r", " " | Out-File -FilePath $MyCSV_DOR -Force -Encoding ascii

如果要同时移除回车换行对(rn),可以改成:

(Get-Content $MyCSV_DOR -Raw) -replace "`r`n", " " | Out-File -FilePath $MyCSV_DOR -Force -Encoding ascii

方案2:逐行处理字段内的回车符

如果你确定回车符只存在于每行的字段内容中(不是行尾的换行),可以保留逐行读取,但直接匹配r:

(Get-Content $MyCSV_DOR) | ForEach-Object {
    # 替换当前行内的所有回车符为空格
    $_ -replace "`r", " "
} | Out-File -FilePath $MyCSV_DOR -Force -Encoding ascii

为什么之前的尝试无效?

  • PowerShell中,正则表达式的换行/回车转义用**反引号()**而不是反斜杠(\),所以\r、\n是无效的,必须用r、n`。
  • 默认的Get-Content会把每行末尾的rn(或n)当作行分隔符截断,所以你处理的每行内容里已经没有这些字符了,自然替换不到。
  • 如果目标是char(13)(单独的回车符),直接匹配r就可以,不需要带上n。

额外小技巧

你也可以用Unicode编码直接指定字符,比如char(13)对应的Unicode是\u000D,所以替换语句也可以写成:

(Get-Content $MyCSV_DOR -Raw) -replace "\u000D", " " | Out-File -FilePath $MyCSV_DOR -Force -Encoding ascii

内容的提问来源于stack exchange,提问作者Conrad S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 08:52:29