Like the answer of Ken, but with the use of the delayed expansion.
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.
The advantage of using the delayed expansion is, that there is no special character handling at all.
`echo Line1%LF%Line2` would fail, as the parser stops parsing at single linefeeds.
More explanations are at
[SO:Long commands split over multiple lines in Vista/DOS batch (.bat) file][1]
[SO:How does the Windows Command Interpreter (CMD.EXE) parse scripts?][2]
**Edit: Avoid `echo.`**
This doesn't answer the question, as the question was about single `echo` that can output multiple lines.
But despite the other answers who suggests the use of `echo.` to create a new line, it should be noted that `echo.` is the worst, as it's very slow and it can completly fail, as cmd.exe searches for a file named `ECHO` and try to start it.
For printing just an empty line, you could use one of
echo,
echo;
echo(
echo/
echo+
echo=
But the use of `echo.`, `echo\` or `echo:` should be avoided, as they can be really slow, depending of the location where the script will be executed, like a network drive.
[1]:
[To see links please register here]
[2]:
[To see links please register here]