如何从批处理文件输出中插入换行符?
我想做的事情是:
echo hello\nworld
这将输出:
hello
world
如何从批处理文件输出中插入换行符?
我想做的事情是:
echo hello\nworld
这将输出:
hello
world
当前回答
要回显换行符,请添加一个点。就在回声之后:
echo.
其他回答
请注意,所有解决方案使用光标定位根据控制台虚拟终端序列,光标定位与:
Sequence | Code | Description | Behaviour |
---|---|---|---|
ESC [ <n> E | CNL | Cursor Next Line | Cursor down <n> lines from current position |
只有在没有到达控制台窗口底部时才能工作。
在底部没有空间来向下移动光标,所以它只是向左移动(与CRLF的CR),之前打印的行从它的开始被覆盖。
在windows 10的虚拟终端序列中,存在高度控制光标位置的方法。
要定义转义序列0x1b,可以使用以下方法:
@Echo off
For /f %%a in ('echo prompt $E^| cmd')Do set \E=%%a
在字符串之间输出一个换行符:
<nul set /p "=Hello%\E%[EWorld"
输出n个换行符,其中n被整数替换。
<nul set /p "=%\E%[nE"
Many
Use:
echo hello
echo:
echo world
就像肯的答案一样,只是用了延迟扩展。
setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)
echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"
First a single linefeed character is created and assigned to the \n-variable. This works as the caret at the line end tries to escape the next character, but if this is a Linefeed it is ignored and the next character is read and escaped (even if this is also a linefeed). Then you need a third linefeed to end the current instruction, else the third line would be appended to the LF-variable. Even batch files have line endings with CR/LF only the LF are important, as the CR's are removed in this phase of the parser.
使用延迟展开的优点是,根本不需要进行特殊的字符处理。 Line1%LF%Line2将失败,因为解析器在单个换行处停止解析。
更多解释见 SO:在Vista/DOS批处理(.bat)文件中,长命令拆分为多行 那么:Windows命令解释器(CMD.EXE)如何解析脚本?
编辑:避免回声。
这并没有回答问题,因为问题是关于单个echo可以输出多行。
但是除了其他答案谁建议使用回声。要创建新行,应注意echo。是最糟糕的,因为它非常慢,它可以完全失败,因为cmd.exe搜索一个名为ECHO的文件,并试图启动它。
如果只打印空行,可以使用其中之一
echo,
echo;
echo(
echo/
echo+
echo=
而是回声的使用。, echo\或echo:应该避免,因为它们会非常慢,这取决于脚本执行的位置,比如网络驱动器。
如果有人来这里是因为他们想从MINGW make makefile中回显一个空行,我使用
@cmd /c echo。
简单地使用echo。导致可怕的process_begin: CreateProcess(NULL, echo。,…)失败了。错误消息。
我希望这能帮助到至少一个人:)