从 Windows 批处理文件向控制台回显空白(空)行 [重复]
Posted
技术标签:
【中文标题】从 Windows 批处理文件向控制台回显空白(空)行 [重复]【英文标题】:Echo a blank (empty) line to the console from a Windows batch file [duplicate] 【发布时间】:2014-01-08 13:46:54 【问题描述】:当从 Windows 批处理文件向控制台输出状态消息时,我想输出 空白行 来分解输出。我该怎么做?
【问题讨论】:
我不相信How can you echo a newline in batch files?这个问题是这个问题的重复。该问题的本质是:使用单个echo
语句,我如何输出两行文本,它们之间有一个换行符? 也就是说,该问题的几个答案还解决了如何输出空白(空)行。
由于这个帖子不再接受答案了...根据以下链接,正确答案是echo:
。 ss64.com/nt/echo.html
总结为echo
发布的ss64 链接... echo.
搜索名为echo
的文件,并且仅在此类文件不存在时创建一个空行。此特性使echo.
比echo:
更慢且更不健壮。
【参考方案1】:
以下三个选项中的任何一个都适合您:
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.
【讨论】:
小心,“echo.
”可能不起作用,请参阅***.com/questions/132799/…下的cmets
另外,不要像愚蠢的我一样在echo .
之间输入空格。【参考方案2】:
注意:虽然我最初的回答吸引了一些人的支持,但我认为我可以做得更好。您可以在编辑历史记录中找到我最初的(简单化和误导性的)答案。
如果微软打算提供一种从cmd.exe
输出空行的方法,那么微软肯定会记录这样一个简单的操作。正是这种疏忽促使我提出这个问题。
因此,因为从cmd.exe
输出空行的方法没有记录在案,可以说人们应该考虑任何关于如何完成此操作的建议 hack .这意味着没有已知的方法可以从cmd.exe
输出一个空白行,保证在所有情况下工作(或有效工作)。
考虑到这一点,这里讨论了从cmd.exe
输出空行的推荐方法。所有建议均基于echo
命令的变体。
echo.
虽然这在大多数情况下都有效,但应该避免,因为它比其他替代方案慢并且实际上可能会失败(请参阅here、@ 987654322@ 和 here)。具体来说,cmd.exe
首先搜索名为echo
的文件并尝试启动它。如果一个名为echo
的文件恰好存在于当前工作目录中,echo.
将失败并显示:
'echo.' is not recognized as an internal or external command,
operable program or batch file.
echo:
echo\
在this answer 的末尾,作者认为这些命令可能很慢,例如,如果它们是从网络驱动器位置执行的。没有给出潜在缓慢的具体原因。但是可以推断它可能与访问文件系统有关。 (也许是因为:
和\
在Windows 文件系统路径中有特殊含义?)
但是,有些人可能认为这些选项是安全的,因为 :
和 \
不能出现在文件名中。出于这个或其他原因,SS64.com 推荐echo:
here。
echo(
echo+
echo,
echo/
echo;
echo=
echo[
echo]
This lengthy discussion 包括我认为的所有这些。 this SO answer 中也推荐了其中几个选项。在引用的讨论中,this post 的结尾似乎是对echo(
和echo:
的推荐。
我在本页顶部的问题未指定 Windows 版本。我在 Windows 10 上的实验表明,无论当前是否存在名为 echo
、echo+
、echo,
、...、echo]
的文件,所有这些都会产生一个空行工作目录。 (请注意,我的问题早于 Windows 10 的发布。所以我承认旧版本的 Windows 可能会有不同的行为。)
在this answer 中,@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.
、echo:
、echo\、echo+
、echo/
、echo[
和 echo]
不安全。在 for /r
循环中使用时,例如for /r %a (*) do echo.%a
等等,它们将路径从上一个文件夹附加到下一个文件夹。 echo(
、echo,
、echo;
和echo=
没有这个问题。【参考方案3】:
通常有使用“回声”的提示。
但这很慢,并且可能会失败并显示错误消息,因为 cmd.exe 将首先搜索名为“echo”(无扩展名)的文件,并且仅当该文件不存在时才会输出空行。
您可以使用echo(
。这大约快 20 倍,并且始终有效。唯一的缺点可能是它看起来很奇怪。
更多关于不同ECHO:/\
变体的信息请访问DOS tips: ECHO. FAILS to give text or blank line。
【讨论】:
你有强调这个问题的来源吗? 恕我直言,担心批处理速度是完全没有意义的——如果你的性能瓶颈在于批处理文件,你不会尝试优化它——你把它扔掉,用真正的语言重写它。 @MatteoItalia,这与速度无关。如果它正在做一些额外的事情(首先搜索一个名为echo
的文件,没有扩展名),那么它是错误的,如果有这样的文件,它确实会失败。如果批处理作业在周末失败,而每个人都在半个国家以外的地方开派对,则可以加分。
@jeb,更新版本的 Windows 怎么样?
@Pacerier 从 XP 到 Win10 的行为似乎相同,自 XP 以来只有很小的变化以上是关于从 Windows 批处理文件向控制台回显空白(空)行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
从 Windows 批处理 (.bat) 脚本中回显带有 Unix 行尾的文本