文章目录
这篇文章将演示 bat批处理如何删除文件中空白行、空格、制表符
一、准备测试数据
准备一个old_file.txt
文件,UTF-8编码,内容如下:
first line
second line
third line
forth line
fifth line
sixth line
测试 1
测试 2
Finish
在Notepad++
中,显示所有字符,截图看下
二、通过for /f
实现
1. 删除仅含换行符的空行
Windows系统下CR
LF
表示换行符
@echo off
for /F "delims=" %%l in (old_file.txt) do (
echo.%%l>>new_file1.txt
)
Tips:
echo.%%l>>
,.
不能省略,%%l
与>>
之间不能有空格,不然空格会在新结果中出现;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:
set "str1=!str: = !"
,注意这里的被替换字符是一个制表符
,将制表符
替换为空格
(尝试了将制表符
替换为空,会出现第8行两个指标符的行仍原样输出了。。。不知道为啥);set "str2=!str1: =!"
,将空格
替换为空;- 经过上边两次替换,如果仍不为空,则表示该行为非空白行,然后
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:
if not "%%L"=="" echo.%%L
如果换成echo.%%L
,则仅含空格或制表符的行,将输出为仅含换行符的空行。
执行结果:
新旧文本对比,可以看出所有空白行及非空白行左侧的空格或制表符都去掉了
4. 删除所有空白行以及非空白行两侧的空格和制表符
@echo off
setlocal enabledelayedexpansion
for /F "tokens=*&#