Frage

Wie kann man Ihnen eine neue Zeile aus Batch-Datei-Ausgabe einfügen?

Ich möchte etwas tun:

echo hello\nworld

Welche ausgeben würde:

hello
world
War es hilfreich?

Lösung

echo hello & echo.world

Das heißt, Sie & echo. als eine Konstante für eine neue Zeile \n definieren könnte.

Andere Tipps

Verwendung:

echo hello
echo.
echo world

Hier gehen Sie, eine BAT-Datei mit den folgenden darin erstellen:

@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

Sie sollten eine Ausgabe wie die folgenden:

There should be a newline
inserted here.

Press any key to continue . . .

Sie müssen nur den Code zwischen den REM-Anweisungen, offensichtlich.

Es ist eine Standardfunktion echo: in cmd / bat-Dateien leere Zeile zu schreiben, die eine neue Zeile in der cmd-Ausgang emuliert:

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

Ausgabe von oben cmd-Datei zitiert:

line1

line2

Wie die Antwort von Ken, aber mit der Verwendung der verzögerten Expansion.

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

Zuerst wird ein einzelne Zeilenvorschub-Zeichen wird in das Verzeichnis \ n-Variable erstellt und zugewiesen.
Dies funktioniert wie die Einfügemarke am Ende der Leitung versucht, das nächste Zeichen zu entkommen, aber wenn dies ein Zeilenvorschub ist es ignoriert wird und das nächste Zeichen wird gelesen und entkam (auch wenn dies ist auch ein Zeilenvorschub).
Dann brauchen Sie einen dritten Zeilenvorschub den aktuellen Befehl zu beenden, sonst die dritte Zeile würde den LF-Variable angehängt werden.
Selbst Batch-Dateien haben Zeilenende mit CR / LF nur die LF sind wichtig, da die CR ist in dieser Phase der Parser entfernt werden.

Der Vorteil der verzögerten Expansion des Einsatzes ist, dass es überhaupt keine Sonderzeichen verarbeitet.
echo Line1%LF%Line2 fehlschlagen würde, wie der Parser an einzelnen Zeilenvorschübe stoppt Parsen.

Weitere Erklärungen sind bei
SO: Lange Befehle aufgeteilt über mehrere Zeilen in Vista / DOS-Batch-Datei (.bat)
SO: Wie funktioniert die Windows-Befehlsinterpreter (cmd.exe) Skripte parsen?

Edit: Vermeiden Sie echo.

Das beantwortet nicht die Frage, wie die Frage nach einzelnen echo war, dass ausgeben kann mehrere Zeilen.

Aber trotz der anderen Antworten, die die Verwendung von echo. schlagen vor, eine neue Zeile zu erstellen, ist zu beachten, dass echo. das Schlimmste ist, da es sehr langsam ist und es kann komplett ausfallen, wie cmd.exe sucht nach einer Datei mit dem Namen ECHO und versuchen, es zu starten.

Für das Drucken nur eine leere Zeile, können Sie einen von verwenden

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

Aber die Verwendung von echo., echo\ oder echo: soll vermieden werden, da sie wirklich langsam sein können, der je nach Lage in dem das Skript ausgeführt wird, wie ein Netzlaufwerk.

echo. Genug gesagt.

Wenn Sie es in einer einzigen Zeile benötigen, verwenden Sie die &. Zum Beispiel:

echo Line 1 & echo. & echo line 3

ausgeben würde, wie:

Line 1

line 3

Jetzt, sagen Sie etwas ein bisschen schicker, wollen ...

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

Ausgänge

hello
world

Dann einfach in einem %n% werfen, wenn Sie eine neue Zeile in einer Echo Aussage wollen. Dies ist mehr in der Nähe Ihrer \n in verschiedenen Sprachen verwendet wird.

Aufgeschlüsselt

set n= setzt den Variable n gleich:

^ Nulls aus dem nächsten Symbol folgen:

& bedeutet einen weiteren Befehl auf der gleichen Linie zu tun. Wir kümmern uns nicht um Errorlevel (seine Echo-Anweisung für crying out loud), so dass keine && benötigt wird.

echo. weiterhin die echo-Anweisung.

All dies funktioniert, weil Sie tatsächlich Variablen erstellen können, die Code sind, und sie innerhalb anderer Befehle verwenden. Es ist wie eine Art Ghetto Funktion, da Charge nicht genau ist die am weitesten fortgeschrittenen Shell-Skriptsprachen. Dies funktioniert nur, weil Batch Arme Verwendung von Variablen, nicht zwischen Ints, Zeichen bezeichnen, Schwimmern, Strings, etc. natürlich.

Wenn Sie schlau sind, könnten Sie erhalten diese mit anderen Dingen zu arbeiten. Zum Beispiel mit ihm einem Registerkarte Echo

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

Wenn etwas Echo in eine Datei, werden Befehle mehr Echos umleiten nicht. Ich denke, vielleicht die „>>“ Redirector ist eine gute Wahl:

echo hello > temp
echo world >> temp

Wie Grimtron schon sagt - hier ist ein kurzes Beispiel, sie zu definieren:

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

Output

C:\>test.bat
hello
world

Wenn Sie in eine Datei Ergebnisse setzen, können Sie

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

Sie können auch so tun,

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

Der Ausgang wird,

a
b
c d

Beachten Sie, dass, wenn diese in einer Batch-Datei gesetzt wird, '%' zu verdoppeln.

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

Wenn jemand kommt hier, weil sie eine leere Zeile aus einem mingw machen Make-Datei Echo suchen, habe ich

@cmd /c echo.

einfach mit echo. bewirkt, dass der gefürchteten process_begin: CreateProcess(NULL, echo., ...) failed. Fehlermeldung.

Ich hoffe, das mindestens eine andere Person aus hilft es:)

Um eine neue Zeile in Batch zu starten, alles, was Sie tun müssen, ist hinzuzufügen "echo [", etwa so:

echo Hi!
echo[
echo Hello!

Das funktioniert für mich, keine verzögerte Erweiterung notwendig:

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

Es schreibt eine Ausgabe wie folgt aus:

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

Ken und Jeb Lösungen funktionieren gut.

Aber die neuen Linien sind mit nur einem LF-Zeichen erzeugt und ich brauche CRLF-Zeichen (Windows-Version).

Um dies zu, am Ende des Skripts habe ich LF in CRLF umgewandelt.

Beispiel:

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

Wenn man berühmt verwenden muss \ n in Stringliterale, die auf eine Variable übergeben werden können, schreiben Sie können einen Code wie in der Hello.bat Skript unter:

@echo off
set input=%1
if defined input (
    set answer=Hi!\nWhy did you call me a %input%?
) else (
    set answer=Hi!\nHow are you?\nWe are friends, you know?\nYou can call me by name.
)

setlocal enableDelayedExpansion
set newline=^


rem Two empty lines above are essential
echo %answer:\n=!newline!%

Auf diese Weise mehrzeilige Ausgabe kann hergestellt in einem Ort, auch in anderen scritpt oder einer externen Datei, und in einem anderen gedruckt.

Der Zeilenumbruch wird in Newline Variable gehalten. Der Wert muss ersetzt werden, nachdem die echo Linie erweitert wird, so verwende ich setlocal enableDelayedExpansion Ausrufezeichen zu ermöglichen, die Variablen auf die Ausführung erweitern. Und die Ausführung ersetzt \ n mit Newline Inhalte (suchen Sie nach Syntax in help set ). Wir könnten natürlich verwenden ! Newline! während der Einstellung der Antwort und \ n ist bequemer. Es kann von außen geführt werden (versuchen Sie Hallo R2 \ ND2 ), wo niemand den Namen Variable Halten der Zeilenumbruch (Ja, Hallo C3! Newline weiß! P0 arbeitet die gleiche Art und Weise).

Im obigen Beispiel kann zu einem Unterprogramm oder Standalone-Batch verfeinert werden, verwendet wie call:mlecho Hi\nI'm your comuter:

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^


echo %text:\n=!nl!%
goto:eof

Bitte beachten Sie, dass zusätzlicher Backslash wird das Skript nicht verhindern, dass \ n Teilzeichenfolge Parsen.

Sie können mit @echo (@echo + [Leerzeichen] + [insecable Leerzeichen])

Hinweis: Der insecable Raum kann mit Alt + 0160 erhalten wird

Hoffe, es hilft:)

[Bearbeiten] Hmm du hast recht, ich brauche es in einem Makefile, es funktioniert perfekt in dort. Ich denke, meine Antwort nicht für Batch-Dateien ... Meine schlecht angepasst ist.

Ich kann nicht machen es einfacher als:

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

Der Charakter konservative Art und Weise dies in Linux-Systemen zu erreichen, ist mit dem -e alias -., Den Escape-Zeichen interpretiert, die backslashed werden

echo -e "hello\nworld"

Hier sind andere Beispiele

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top