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

Dav*_*dRR 123 windows batch-file echo

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

Sun*_*nny 128

以下三个选项中的任何一个都适合您:

echo[

echo(

echo. 
Run Code Online (Sandbox Code Playgroud)

例如:

@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.
Run Code Online (Sandbox Code Playgroud)

  • 小心,"回声."可能不起作用,请参阅http://stackoverflow.com/questions/132799/how-can-you-echo-a-newline-in-batch-files#comment51325122_3123194下的评论. (6认同)
  • 也不要像愚蠢的我一样在 `echo.` 之间输入空格。 (2认同)

Dav*_*dRR 84

注意:虽然我的原始答案吸引了几个赞成,但我认为我可以做得更好.您可以在编辑历史记录中找到我原始(简单和误导)的答案.

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

所以,因为输出从一个空行的手段cmd.exe没有记录的,可以说是一个应该考虑如何做到这一点是一个任何建议黑客.这意味着没有已知的输出空白行的方法cmd.exe可以保证所有情况下都能正常工作(或高效工作).

考虑到这一点,这里讨论推荐用于输出空白行的方法cmd.exe.所有建议均基于echo命令的变体.


echo.
Run Code Online (Sandbox Code Playgroud)

虽然这在很多情况下都可以使用,但是应该避免使用它,因为它比其替代方案慢,实际上可能会失败(参见此处,此处此处).具体来说,cmd.exe首先搜索名为的文件echo并尝试启动它.如果命名的文件echo恰好存在于当前工作目录中,echo.则将失败:

'echo.' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
echo:
echo\
Run Code Online (Sandbox Code Playgroud)

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

然而,有些人可能认为这是因为安全选项:,并\不能出现在一个文件名.由于这个或其他原因,echo:SS64.com推荐这里.


echo(
echo+
echo,
echo/
echo;
echo=
echo[
echo]
Run Code Online (Sandbox Code Playgroud)

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

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

这个答案中,@ jb断言echo( 总是有效.对我来说,@ jeb的答案暗示其他选项不太可靠,但没有提供任何细节可能的原因.请注意,@ jb为我在本答案中引用的其他参考文献贡献了许多有价值的内容.


结论:千万不能使用echo..在我引用的消息来源中遇到的许多其他选项中,对这两个选项的支持似乎最具权威性:

echo(
echo:
Run Code Online (Sandbox Code Playgroud)

但我没有找到任何有力的证据表明使用其中任何一种都将无故障.


用法示例:

@echo off
echo Here is the first line.
echo(
echo There is a blank line above this line.
Run Code Online (Sandbox Code Playgroud)

预期产量:

Here is the first line.

There is a blank line above this line.
Run Code Online (Sandbox Code Playgroud)

  • `echo.`、`echo:`、echo\、`echo+`、`echo/`、`echo[` 和 `echo]` 是不安全的。当在 `for /r` 循环中使用时,例如 `for /r %a (*) do echo.%a` 等等,它们会将路径从前一个文件夹附加到下一个文件夹。`echo(`、`echo,`、`echo;` 和`echo=` 没有这个问题。 (9认同)

jeb*_*jeb 40

通常有提示使用'回声'.

但这很慢,并且可能会因错误消息而失败,因为cmd.exe将首先搜索名为"echo"的文件(没有扩展名),并且只有当文件不存在时才输出空行.

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

有关不同ECHO:/\变体的更多信息,请参阅DOS提示:ECHO.FAILS给出文字或空白行.

  • 恕我直言,担心批量速度是完全没有意义的 - 如果您的性能瓶颈在于批处理文件中,您不会尝试优化它 - 您可以将其丢弃以用真实语言重写它. (8认同)
  • @MatteoItalia,这与速度无关.如果它正在做一些额外的事情(首先搜索一个名为`echo`而没有扩展名的文件)那么这是错误的,如果有这样的文件,它确实会失败.如果批量工作在一个周末失败,而每个人都在半个国家的聚会上,那么额外积分就会增加. (4认同)
  • 你有一个突出这个问题的来源吗? (3认同)