Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 405 Vote(s) - 3.49 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How can I echo a newline in a batch file?

#1
<!-- language-all: lang-bat -->

How can you you insert a newline from your batch file output?

I want to do something like:

echo hello\nworld

Which would output:

hello
world
Reply

#2
When echoing something to redirect to a file, multiple echo commands will not work. I think maybe the ">>" redirector is a good choice:

<pre>
echo hello > temp
echo world >> temp
</pre>
Reply

#3
You can also do like this,

(for %i in (a b "c d") do @echo %~i)

The output will be,

a
b
c d

Note that when this is put in a batch file, '%' shall be doubled.

(for %%i in (a b "c d") do @echo %%~i)
Reply

#4
If anybody comes here because they are looking to echo a blank line from a MINGW make makefile, I used

`@cmd /c echo.`

simply using `echo.` causes the dreaded `process_begin: CreateProcess(NULL, echo., ...) failed.` error message.

I hope this helps at least one other person out there :)
Reply

#5
You can use `@echo ` ( @echo + [space] + [insecable space] )

Note: The insecable space can be obtained with Alt+0160

Hope it helps :)

[edit] Hmm you're right, I needed it in a Makefile, it works perfectly in there. I guess my answer is not adapted for batch files... My bad.
Reply

#6
This worked for me, no delayed expansion necessary:

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

It writes output like this:

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

Reply

#7
Just like Grimtron suggests - here is a quick example to define it:

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

###Output

C:\>test.bat
hello
world
Reply

#8
`echo.` Enough said.

If you need it in a single line, use the `&`. For example,

echo Line 1 & echo. & echo line 3

would output as:

Line 1

line 3


**Now, say you want something a bit fancier, ...**

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

hello
world
Then just throw in a `%n%` whenever you want a new line in an echo statement. This is more close to your `\n` used in various languages.

**Breakdown**

`set n=` sets the variable `n` equal to:

`^` Nulls out the next symbol to follow:

`&` Means to do another command on the same line. We don't care about errorlevel(its an echo statement for crying out loud), so no `&&` is needed.

`echo.` Continues the echo statement.

All of this works because you can actually create variables that are code, and use them inside of other commands. It is sort of like a ghetto function, since batch is not exactly the most advanced of shell scripting languages. This only works because batch's poor usage of variables, not designating between ints, chars, floats, strings, etc naturally.

If you are crafty, you could get this to work with other things. For example, using it to echo a tab

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

#9
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]

Reply

#10
To start a new line in batch, all you have to do is add "echo[", like so:

echo Hi!
echo[
echo Hello!
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through