Windows批处理:如何删除所有空白(或空)行

and*_*ndy 5 regex windows sed batch-file

我正在尝试使用Windows批处理程序从文本文件中删除所有空白行。

我知道你实现这一目标是巴最简单的方法SH是通过正则表达式和sed命令:

sed -i "/^$/d" test.txt
Run Code Online (Sandbox Code Playgroud)

问题:Windows批处理是否具有类似的简单方法,可从文本文件中删除所有行?否则,最简单的方法是什么?

注意: 我正在运行此批处理脚本来设置新的Windows计算机供客户使用,因此最好无需安装其他程序(然后再安装)即可实现这一目标-理想情况下,我将仅使用“标准”程序批处理库。

小智 8

您还可以使用 FINDSTR:

findstr /v "^$" C:\text_with_blank_lines.txt > C:\text_without_blank_lines.txt
Run Code Online (Sandbox Code Playgroud)

/V——仅打印不包含匹配项的行。
^ --- 行位置:行首
$ --- 行位置:行尾

我通常通过管道将命令输出传递给它:

dir | findstr /v "^$"
Run Code Online (Sandbox Code Playgroud)

您可能还会发现类似问题的这些答案很有帮助,因为某些“空行”可能包含空格或制表符。

/sf/answers/3151527081/
/sf/answers/1124348781/


npo*_*aka 6

对于/ f,不处理空行:

for /f "usebackq tokens=* delims=" %%a in ("test.txt") do (echo(%%a)>>~.txt
move /y  ~.txt "test.txt"
Run Code Online (Sandbox Code Playgroud)

  • @andyandy,在命令提示符窗口中键入`for /?`,然后阅读帮助文本;基本上,`delims =`会使`for / F`整体读取每一行,实际上这里并不需要`tokens = *`(但没有害处);usebackq允许将给定的文件名test.txt放在“”中(不使用usebackq,将test.txt视为文字字符串,而不是文件路径/名称);这里不需要`usebackq`和`“”`,但是最好使用它,因为这样即使在文件路径/名称包含空格的情况下也可以使用... (3认同)
  • @andyandy,您直接在命令提示符下尝试此操作,对吗?如果是这样,请声明`%a`而不是`%% a` ... (2认同)