Windows bat实现删除文本中的 空行、空格、制表符、最后一行空行

本文介绍了如何使用Windows批处理(BAT)脚本删除文本文件中的空行、空格、制表符,包括仅含换行符的空行、所有空白行以及非空白行两侧的空格和制表符。同时,文章讨论了如何处理文件末尾的空行问题,提供了多种解决方案,并比较了不同方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章将演示 bat批处理如何删除文件中空白行、空格、制表符

一、准备测试数据

准备一个old_file.txt文件,UTF-8编码,内容如下:

first line
second line    
    third line    

	forth line		
	    
	fifth line    
		
    sixth line	  
    	
	测试  1  	
        
    测试	2   
Finish      

Notepad++中,显示所有字符,截图看下
old_file.txt

二、通过for /f实现

1. 删除仅含换行符的空行

Windows系统下CR LF表示换行符

@echo off
for /F "delims=" %%l in (old_file.txt) do (
	echo.%%l>>new_file1.txt
)

Tips:

  1. echo.%%l>>,.不能省略,%%l>>之间不能有空格,不然空格会在新结果中出现;
  2. echo.你可以替换成echo+echo;echo: 等等,关于echo这种用法的更多讨论可参考:ECHO. FAILS to give text or blank line - Instead use ECHO/

执行结果:
新旧文本对比(肉眼对比),可以看出第4行仅含换行符的空白行被去除了。
注意:最后一行不含任何字符的保持原样
新旧文本对比

2. 删除所有空白行

删除仅含换行符、仅含空格或制表符的空白行

@echo off
setlocal enabledelayedexpansion
for /F "delims=" %%L in (old_file.txt) do (
	set "str=%%L"
	set "str1=!str:	= !"
	set "str2=!str1: =!"
	if not "!str2!"=="" echo.%%L
)>>new_file2.txt
endlocal

Tips:

  1. set "str1=!str: = !",注意这里的被替换字符是一个制表符,将制表符替换为空格(尝试了将制表符替换为空,会出现第8行两个指标符的行仍原样输出了。。。不知道为啥);
  2. set "str2=!str1: =!",将空格替换为空;
  3. 经过上边两次替换,如果仍不为空,则表示该行为非空白行,然后 echo.%%L输出原行内容

执行结果:
新旧文本对比,可以看出仅含换行符、仅含空格或指标符的空白行(第4、6、8、10、12行)去除了。
删除所有空白行

3. 删除所有空白行以及非空白行左侧的空格和制表符

@echo off
for /F "tokens=*" %%L in (old_file.txt) do (
	if not "%%L"=="" echo.%%L
)>>new_file3.txt

Tips:

  1. if not "%%L"=="" echo.%%L如果换成echo.%%L,则仅含空格或制表符的行,将输出为仅含换行符的空行。

执行结果:
新旧文本对比,可以看出所有空白行及非空白行左侧的空格或制表符都去掉了删除空白行及左侧空白

4. 删除所有空白行以及非空白行两侧的空格和制表符

@echo off
setlocal enabledelayedexpansion
for /F "tokens=*&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小青龍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值