小编典典

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

all

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


阅读 73

收藏
2022-08-02

共1个答案

小编典典

注意:虽然我最初的回答吸引了一些人的支持,但我认为我可以做得更好。 您可以在编辑历史记录中找到我原来的(简单化和误导性的)答案。

如果 Microsoft 打算提供一种从 中输出空行的方法cmd.exe,那么 Microsoft
肯定会记录如此简单的操作。正是这种疏忽促使我提出这个问题。

因此,由于 没有cmd.exe记录用于输出空行的方法,可以说人们应该考虑任何关于如何完成此操作的建议是一种 hack
。这意味着没有已知的方法可以 保证在 所有 情况下都可以正常工作(或有效工作) 。 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 文件系统路径中有特殊含义?)

但是,有些人可能认为这些是安全的选项,因为:它们\不能出现在文件名中。出于这个或其他原因,这里echo:
SS64.com 推荐的。


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

这个冗长的讨论包括我认为的所有这些。在这个 SO
答案
中也推荐了其中几个选项。在引用的讨论中,这篇文章的结尾似乎是对echo(and的推荐echo:

我在本页顶部的问题没有指定 Windows 的版本。我在 Windows 10 上的实验表明, 所有 这些都会产生一个空白行,无论名为echo,
echo+, echo,, …的文件是否echo]存在于当前工作目录中。(请注意,我的问题早于 Windows 10
的发布。所以我承认旧版本的 Windows 可能会有不同的行为。)

在[这个答案](通常有使用“echo”的提示。

但这很慢,并且可能会失败并显示错误消息,因为 cmd.exe 将首先搜索名为“echo”(无扩展名)的文件,并且仅当该文件不存在时才会输出空行。

你可以使用echo(. 这大约快 20 倍,并且始终有效。唯一的缺点可能是它看起来很奇怪。)中,断言它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.
2022-08-02