【问题标题】:Windows Batch: How remove all blank (or empty) linesWindows Batch:如何删除所有空白(或空)行
【发布时间】:2016-01-21 11:26:04
【问题描述】:

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

我知道实现这一点的最简单方法是 bash 是通过正则表达式和 sed 命令:

sed -i "/^$/d" test.txt

问题:Windows 批处理是否有类似的简单 方法来从文本文件中删除所有行?否则,实现这一目标的最简单方法是什么?

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

【问题讨论】:

标签: regex windows batch-file sed


【解决方案1】:

对于 /f 不处理空行:

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

【讨论】:

  • 我收到一个错误:“%%a 在这个时候是意外的。”有任何想法吗?另外,请您解释一下答案中每个单词的含义(或将我指向任何有帮助的文档)。谢谢!
  • @andyandy,您是直接在命令提示符下尝试的,对吗?如果是这样,请声明 %a 而不是 %%a...
  • @aschipfl 非常感谢!是的,我直接在命令提示符下尝试它 - 现在可以使用。你能解释一下 "usebackq tokens=* delims=" 是什么意思吗(我想我理解其他所有内容)?
  • @andyandy,在命令提示符窗口中输入for /? 并阅读帮助文本;基本上,delims= 导致for /F 将每一行作为一个整体读取,tokens=* 实际上在这里不需要(但没有害处); usebackq 允许将给定的文件名test.txt 放在"" 中(没有usebackqtest.txt 将被视为文字字符串而不是文件路径/名称); usebackq"" 在这里不需要,但使用它是个好主意,因为这样即使文件路径/名称包含空格,它也可以工作......
  • 虽然它适用于常规文件,但在处理大文件后,缺少长行(> 62k 个字符)。小心。
【解决方案2】:

您也可以使用 FINDSTR:

findstr /v "^$" C:\text_with_blank_lines.txt > C:\text_without_blank_lines.txt

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

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

dir | findstr /v "^$"

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

https://stackoverflow.com/a/45021815/5651418
https://stackoverflow.com/a/16062125/5651418

【讨论】:

  • for 方法更安全、更快捷。顺便说一句:还有:dir|findstr ..findstr 的“任何字符”通配符(因此它会找到包含至少一个字符的每一行(除了行尾)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2018-08-14
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多