批处理:如何移除文本文件多行空行并保留单行空行?
解决方法:移除多行空行并保留单行空行的批处理脚本
你之前使用的for /f命令存在本质问题:它默认会忽略所有空行,导致输出文件中完全丢失空行,无法满足保留单行分隔空行的需求。要实现目标,需要跟踪每行状态,只保留非连续的空行,以下是正确的批处理脚本:
@echo off setlocal enabledelayedexpansion set "prev_empty=" set "temp_file=~.txt" del "%temp_file%" 2>nul for /f "usebackq delims=" %%a in ("test.txt") do ( set "current_line=%%a" if "!current_line!"=="" ( if not defined prev_empty ( echo(>>"%temp_file%" set "prev_empty=1" ) ) else ( echo(!current_line!>>"%temp_file%" set "prev_empty=" ) ) move /y "%temp_file%" "test.txt" endlocal
脚本逻辑说明
- 启用
enabledelayedexpansion以支持循环内的变量实时判断与赋值 prev_empty变量用于标记上一行是否为空行- 遍历每行时:
- 若当前行是空行,且上一行不是空行,才输出该空行,并标记上一行状态为空
- 若当前行非空,直接输出内容,并清空上一行的空行标记
- 最终将临时文件覆盖原文件,实现多行空行压缩为单行的效果
内容的提问来源于stack exchange,提问作者usersam
相关产品推荐
相关产品推荐

