从 Windows 批处理文件向控制台回显空行(空行)

当从 Windows 批处理文件向控制台输出状态消息时,我希望输出 空白行以分解输出。我该怎么做?

256998 次浏览

注意: 虽然我最初的回答吸引了一些赞成票,但我认为我可以做得更好。您可以在编辑历史中找到我的原始答案(过于简单和误导)。

如果微软有意提供一种从 cmd.exe输出空行的方法,微软肯定会记录这样一个简单的操作。正是这种遗漏促使我提出这个问题。

因此,因为从 cmd.exe输出空行的方法是 没有文档化的,所以可以说,应该考虑任何关于如何实现这一点的建议,使之成为 黑客。这意味着没有已知的方法可以从 cmd.exe输出一个空行,即 保证,以便在 所有的情况下工作(或有效地工作)。

考虑到这一点,下面将讨论从 cmd.exe输出空行的推荐方法。所有建议都基于 echo命令的变体。


echo.

虽然这将工作在许多情况下,如果不是大多数情况下,应该避免,因为它是慢于其替代品,实际上可能会失败(见 给你给你,和 给你)。具体来说,cmd.exe首先搜索名为 echo的文件并尝试启动它。如果当前工作目录中正好存在一个名为 echo的文件,那么 echo.将会失败:

'echo.' is not recognized as an internal or external command,
operable program or batch file.

echo:
echo\

这个答案的末尾,作者认为这些命令可能比较慢,例如,如果它们是从网络驱动器位置执行的。没有给出潜在的缓慢的具体原因。但是我们可以推断它可能与访问文件系统有关。(也许是因为 :\在 Windows 文件系统路径中具有特殊意义?)

但是,有些人可能认为这些选项是安全的,因为 :\不能出现在文件名中。基于这样或那样的原因,SS64.com 给你推荐使用 echo:


echo(
echo+
echo,
echo/
echo;
echo=
echo[
echo]

这个冗长的讨论包括我认为的所有这些。在 这么回答中也推荐这些选项中的几个。在引用的讨论中,这篇文章以一个似乎是对 echo(echo:的建议结束。

本页顶部的问题没有指定 Windows 的版本。我在 Windows 10上的实验表明,无论当前工作目录中是否存在名为 echoecho+echo,、 ... 、 echo]的文件,这些文件中的 所有都会产生一个空行。(请注意,我的问题是在 Windows10发布之前提出的。因此,我承认老版本的 Windows 可能会有不同的表现。)

这个答案中,@ Jeb断言 echo( 一直都是起作用。在我看来,@jeb 的回答意味着其他选择不那么可靠,但没有提供任何细节说明原因。请注意,@jeb 为我在这个回答中引用的其他参考文献贡献了许多有价值的内容。


结论: 没有使用 echo.。在我引用的资料中,我遇到了许多其他的选择,对这两个选择的支持似乎是最权威的:

echo(
echo:

但我没有发现任何有力的证据表明,使用这两种方法中的任何一种总是没有问题的。


示例用法:

@echo off
echo Here is the first line.
echo(
echo There is a blank line above this line.

预期产出:

Here is the first line.


There is a blank line above this line.

经常有使用“ echo”的提示

但是这个过程很慢,并且可能会出现错误消息,因为 cmd.exe 将首先搜索名为“ echo”的文件(不带扩展名) ,只有当文件不存在时,它才会输出一个空行。

你可以用 echo(。这大约快20倍,而且总是有效。唯一的缺点可能是它看起来很奇怪。

关于不同的 ECHO:/\变体的更多信息在 DOS 提示: 不能给出文本或空行

以下三种选择中的任何一种都适合你:

echo[


echo(


echo.

例如:

@echo off
echo There will be a blank line below
echo[
echo Above line is blank
echo(
echo The above line is also blank.
echo.
echo The above line is also blank.