你怎么能在batch file中回显换行符?

你怎么能从你的batch file输出插入一个换行符?

我想做一些事情:

> echo hello\nworld

哪个会输出:

你好
世界

echo hello & echo.world

这意味着你可以定义& echo. 作为换行的常数。

使用:

 echo hello echo. echo world 

在这里,创build一个.bat文件,其中包含以下内容:

 @echo off REM Creating a Newline variable (the two blank lines are required!) set NLM=^ set NL=^^^%NLM%%NLM%^%NLM%%NLM% REM Example Usage: echo There should be a newline%NL%inserted here. echo. pause 

你应该看到如下的输出:

 There should be a newline inserted here. Press any key to continue . . . 

您显然只需要REM语句之间的代码。

有一个标准的functionecho:在cmd / bat-files中写空行,这在你的cmd输出中模拟了一个新行:

 @echo off @echo line1 @echo: @echo line2 

上面引用的cmd-file的输出:

 line1 line2 

像Ken的答案一样,但是使用了延迟扩展。

 setlocal EnableDelayedExpansion (set \n=^ %=Do not remove this line=% ) echo Line1!\n!Line2 echo Works also with quotes "!\n!line2" 

首先创build一个换行符,并将其分配给\ nvariables。
这在线端的插入符号试图逃离下一个字符,但是如果这是一个换行,它将被忽略,并且下一个字符被读取和转义(即使这也是一个换行符)。
然后你需要第三个换行符来结束当前的指令,否则第三行将被附加到LFvariables。
即使batch file的行结束符为CR / LF,只有LF才是重要的,因为CR在parsing器的这个阶段被删除。

使用延迟扩展的好处是,没有特殊的字符处理。
echo Line1%LF%Line2将会失败,因为parsing器在单个换行符处停止parsing。

更多的解释是
SO:长命令在Vista / DOS批处理(.bat)文件中分成多行
SO:Windows命令解释器(CMD.EXE)如何parsing脚本?

编辑:避免echo.

这不能回答这个问题,因为问题是关于可以输出多行的单个echo

但是,尽pipe其他答案谁build议使用echo. 创build一个新的行,应该指出, echo. 是最糟糕的,因为它非常慢,并且可能完全失败,因为cmd.exesearch名为ECHO的文件并尝试启动它。

为了打印一个空行,你可以使用其中的一个

 echo, echo; echo( echo/ echo+ echo= 

但使用echo.echo\echo:应该避免,因为他们可以真的很慢,取决于脚本将执行的位置,如networking驱动器。

echo. 说够了。

如果你需要在一行中,使用& 。 例如,

 echo Line 1 & echo. & echo line 3 

会输出为:

 Line 1 line 3 

现在,说你想要一些更有趣的东西,…

 set n=^&echo. echo hello %n% world 

输出

 hello world 

然后,只要你想在echo语句中添加一个新行,就可以抛出%n% 。 这更接近您在各种语言中使用的\n

分解

set n=设置variablesn等于:

^排除下一个符号:

&意味着在同一行上执行另一个命令。 我们不关心errorlevel(它是一个大声喊叫的回声声明),所以不需要&&

echo. 继续回声陈述。

所有这些工作,因为你实际上可以创build代码的variables,并在其他命令中使用它们。 这有点像一个贫民窟的function,因为批量并不是最先进的shell脚本语言。 这只适用于批处理variables使用不当,而不是自动指定整数,字符,浮点数,string等。

如果你狡猾,你可以得到这个与其他事情。 例如,使用它来回显选项卡

 set t=^&echo. ::there are spaces up to the double colon 

当回显某个东西redirect到一个文件时,多个回显命令将不起作用。 我想也许“>>”redirect是一个不错的select:

 echo hello> temp
回声世界>>临时

就像Grimtron所build议的那样 – 下面是一个快速定义它的例子:

 @echo off set newline=^& echo. echo hello %newline%world 

产量

 C:\>test.bat hello world 

如果你需要把结果放到一个文件中,你可以使用

 (echo a & echo. & echo b) > file_containing_multiple_lines.txt 

你也可以这样做,

 (for %i in (ab "cd") do @echo %~i) 

输出将是,

 a b cd 

请注意,如果将其放入batch file中,则“%”应该加倍。

 (for %%i in (ab "cd") do @echo %%~i) 

如果有人来这里,因为他们正在寻找从MINGW make makefile回显空行,我用

@cmd /c echo.

简单地使用echo. 导致可怕的process_begin: CreateProcess(NULL, echo., ...) failed. 错误信息。

我希望这有助于至less有一个其他人:)

要批量开始新行,您只需添加“echo [”,如下所示:

 echo Hi! echo[ echo Hello! 

肯和Jeb解决scheme运作良好。

但是新行仅用LF字符生成,我需要CRLF字符(Windows版本)。

为此,在脚本的末尾,我已经将LF转换为CRLF。

例:

 TYPE file.txt | FIND "" /V > file_win.txt del file.txt rename file_win.txt file.txt 

你可以使用@echo (@echo + [space] + [insecable space])

注意:可以用Alt + 0160获得可以放置的空间

希望它有助于:)

嗯,你是对的,我需要它在一个Makefile,它在那里完美的作品。 我想我的答案是不适合batch file…我的坏。

这为我工作,没有延迟的必要的扩展:

 @echo off ( echo ^<html^> echo ^<body^> echo Hello echo ^</body^> echo ^</html^> ) pause 

它写这样的输出:

 <html> <body> Hello </body> </html> Press any key to continue . . . 

我不能说比以下更简单:

 echo echo hello^&echo world^&pause>silly.bat call silly.bat 

我不知道为什么人们不推荐这个,但echo有一个选项来启用反斜杠转义,这意味着\n将与echo工作。

于是

 echo -e "Hello\nWorld" 

会给出输出

 Hello World