编写Batch脚本将文本文件中CR替换为CRLF求助
批量将CR替换为CRLF的Batch脚本方案
嘿,我刚好有个实用的方案帮你搞定批量替换的需求!纯Batch处理控制字符有点麻烦,所以我推荐在Batch里调用PowerShell的功能——既保留Batch批量处理的便捷性,又能精准搞定换行符的替换。
直接能用的脚本代码
@echo off setlocal enabledelayedexpansion :: 这里可以修改成你需要处理的文件类型,多个用空格分隔 set "target_files=*.txt *.log" :: 遍历当前目录及所有子目录的目标文件(不需要子目录就去掉/R) for /R %%f in (%target_files%) do ( echo 正在处理: %%f :: 用PowerShell替换单独的CR为CRLF,写回原文件 powershell -Command "(Get-Content '%%f' -Raw) -replace '`r(?!`n)', '`r`n' | Set-Content '%%f' -NoNewline" ) echo 所有文件处理完成啦! pause
脚本细节说明
- 指定文件类型:修改
set "target_files=*.txt *.log"这一行,比如只处理txt文件就写*.txt,多个类型用空格隔开就行。 - 递归处理子目录:
for /R会遍历当前目录下的所有子目录,如果只需要处理当前目录的文件,把/R删掉就好。 - PowerShell核心逻辑:
Get-Content '%%f' -Raw:一次性读取整个文件,避免逐行处理时的换行符干扰。-replace 'r(?!n)', 'rn':用正则匹配单独的CR(后面没跟LF的情况),替换成CRLF。(?!n)`是负向预查,确保不会把已经是CRLF的地方重复替换。Set-Content '%%f' -NoNewline:写回文件时不额外加换行,避免文件末尾多出空行。
怎么用?
- 把上面的代码复制到记事本,保存成
CRtoCRLF.bat(注意保存类型选「所有文件」,编码用ANSI)。 - 把这个bat文件放到你要处理的文件所在的目录(父目录也可以,要是开了递归的话)。
- 双击运行,等着它自动处理完就行!
额外小提示
- 怕误操作的话,可以在处理前先备份文件,在
for循环里加一行:
这样每个文件都会生成一个copy "%%f" "%%f.bak" >nul.bak的备份。 - 如果你的文件是UTF-8编码(带BOM),把PowerShell里的
Set-Content改成Set-Content -Encoding UTF8,避免编码乱码。
内容的提问来源于stack exchange,提问作者Sarita Jadhav
相关产品推荐
相关产品推荐

