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

PowerShell遍历文本文件替换回车符\r代码失效问题求助

问题根因

原代码无法替换回车符的核心原因是Get-Content的默认读取逻辑:默认情况下该 cmdlet 会按换行符拆分文件内容,返回的每一行字符串已经自动剥离了行尾的回车(\r)、换行(\n)控制符,后续管道中处理的单行内容根本不包含回车符,无论怎么写匹配规则都无法命中替换。
除此之外原代码还有几个容易出问题的点:

  • 没有过滤遍历对象,会把目录、二进制文件也纳入处理,容易触发读取错误
  • 单引号包裹的'\r'在PowerShell中不会被解析为转义字符,只会被识别为普通的\和r两个字符,匹配逻辑本身存在问题
  • 写回文件时没有指定编码,可能出现和原文件编码不一致导致的乱码
可直接运行的修复代码
$targetPath = "C:\Users\admin\Desktop\TESTING\"
# 按需修改-Include后的后缀,筛选需要处理的文本文件
$files = Get-ChildItem -Path $targetPath -Recurse -File -Include *.txt
foreach ($file in $files) {
    # 加-Raw参数一次性读取整文件为完整字符串,保留所有原始控制字符
    $rawContent = Get-Content -Path $file.FullName -Raw
    # 替换所有回车符,如需统一换行格式为LF,替换\r为空即可
    $fixedContent = $rawContent -replace "`r", ""
    # 写回文件,指定编码、禁止自动追加末尾换行
    Set-Content -Path $file.FullName -Value $fixedContent -Encoding UTF8 -NoNewline
}
关键参数说明
  • -Raw:是解决回车符匹配不到的核心参数,关闭按行拆分逻辑,完整保留文件原始内容
  • `r:PowerShell中用反引号作为转义符,双引号包裹的`r才是代表回车符的正确写法
  • -File:限定Get-ChildItem只返回文件对象,过滤掉目录
  • -NoNewline:避免Set-Content在文件末尾自动追加多余的换行符
  • -Encoding:显式指定输出编码,可根据自己的实际文件编码改成UTF8、Default(系统默认编码)等,避免乱码

内容的提问来源于stack exchange,提问作者TheRealHamzaYusuf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:09:32