CMD批处理逐行读写文本文件:行尾空格、换行符及空行丢失问题修复
问题及修复方案
原始问题
使用以下批处理脚本读取文本文件并修改输出后,出现两个问题:
- 新文件与原文件行尾格式不同,且每行末尾有多余空格
- 修改echo语句去除空格后,原文件的空行无法保留
原始脚本:
@echo off set source=mysourcefile.txt type NUL > new_%source% FOR /f "usebackq delims=" %%b IN (".\%source%") DO ( REM make some changes to the line and output the result to the new file set "outline=%%b" REM echo %outline% >> new_%source% echo %outline%>>new_%source% )
修复方案
1. 解决行尾格式、多余空格及空行丢失问题
修改后的脚本同时处理三个问题,核心改进点已标注:
@echo off setlocal enabledelayedexpansion set "source=mysourcefile.txt" :: 清空目标文件 type NUL > "new_%source%" :: 用findstr给每行加行号,空行也会被捕获(格式:行号:内容) for /f "delims=" %%b in ('findstr /n "^" ".\%source%"') do ( set "line=%%b" :: 拆分行号和内容,从第2个字符开始截取(跳过行号和冒号) set "outline=!line:*:=!" :: 这里添加你的行内容修改逻辑,比如替换字符串: :: set "outline=!outline:旧字符串=新字符串!" :: 输出到新文件,echo( 可以输出空行且无多余空格 echo(!outline!>>"new_%source%" ) endlocal
关键细节说明
setlocal enabledelayedexpansion:批处理默认在循环前解析所有变量,启用延迟扩展后,!变量名!能实时读取循环内的变量值,避免变量替换失效findstr /n "^":^匹配行首,/n给每行加行号,空行会被处理为行号:的格式,确保for /f不会跳过空行echo(!outline!:echo(是批处理中输出空行或内容的安全写法,不会在内容末尾添加多余空格,同时保留原始行的格式
内容的提问来源于stack exchange,提问作者tarekahf
相关产品推荐
相关产品推荐

