783 Stimmen

Wie kann ich einen Zeilenumbruch in einer Batch-Datei ausgeben?

Wie können Sie einen Zeilenumbruch in die Ausgabe Ihrer Batch-Datei einfügen?

Ich möchte etwas tun wie:

echo hello\nworld

Die Ausgabe wäre:

hello
world

9 Stimmen

Das war für mich sehr nützlich. Ich musste Echo machen \n \n | my_app.exe in einem Skript. Ich habe (echo. && echo.) | my_app.exe

2 Stimmen

Einfacher Ansatz " Code beginnt :" > echo hello&echo world , gibt Ihnen was Sie brauchen

2 Stimmen

Sie können ein unsichtbares ascii chr(255) in einer separaten Zeile einfügen, das eine neue Leerzeile erzwingt. Halten Sie die [alt]-Taste gedrückt und drücken Sie 255 auf der Tastatur. Dies fügt chr(255) ein, das ein leeres Quadrat ist. echo (alt+255) " Sie können nur den Ziffernblock benutzen, nicht die Zahlen oben auf der Tastatur!

8voto

Wayne Uroda Punkte 4757

Falls jemand hierher kommt, weil er eine leere Zeile aus einem MINGW-Makefile ausgeben möchte, habe ich

@cmd /c echo.

einfach mit echo. verursacht die gefürchtete process_begin: CreateProcess(NULL, echo., ...) failed. Fehlermeldung.

Ich hoffe, das hilft wenigstens einer anderen Person da draußen :)

3voto

otaviodecampos Punkte 1180

Die Lösungen von Ken und Jeb funktionieren gut.

Aber die neuen Zeilen werden nur mit einem LF-Zeichen erzeugt, und ich brauche CRLF-Zeichen (Windows-Version).

Dazu habe ich am Ende des Skripts LF in CRLF umgewandelt.

Beispiel:

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

3voto

Tomator Punkte 81

Wenn man berühmte Namen verwenden muss \n in String-Literalen, die an eine Variable übergeben werden können, können Sie einen Code wie in der Hallo.bat Skript unten:

@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 kann die mehrzeilige Ausgabe an einer Stelle vorbereitet werden, sogar in einem anderen Skript oder einer externen Datei, und an einer anderen Stelle gedruckt werden.

Der Zeilenumbruch wird gehalten in Zeilenumbruch variabel. Ihr Wert muss ersetzt werden nach die echo Zeile erweitert wird, verwende ich setlocal enableDelayedExpansion um Ausrufezeichen zu aktivieren, die Variablen bei der Ausführung erweitern. Und die Ausführung ersetzt \n con Zeilenumbruch Inhalt (siehe Syntax unter Hilfe einstellen ). Wir könnten natürlich auch !newline! während der Einstellung der respuesta sondern \n bequemer ist. Es kann von außen weitergegeben werden (versuchen Sie Hallo R2 \nD2 ), wo niemand den Namen der Variablen kennt, die den Zeilenumbruch enthält (Ja, Hallo C3!newline!P0 funktioniert auf die gleiche Weise).

Das obige Beispiel kann zu einer Unterroutine oder einem eigenständigen Batch verfeinert werden, der wie folgt verwendet wird call:mlecho Hi\nI'm your comuter :

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

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

Bitte beachten Sie, dass ein zusätzlicher Backslash das Skript nicht daran hindert, die folgenden Daten zu analysieren \n Teilstring.

2voto

Gerold Broser Punkte 13027

Bitte beachten Sie, dass alle Lösungen, die die Cursorpositionierung nach Konsole Virtuelles Terminal - Sequenzen, Cursorpositionierung mit:

Sequenz

Code

Beschreibung

Verhalten

ESC [ <n> E

CNL

Cursor nächste Zeile

Cursor abwärts <n> Zeilen von der aktuellen Position

nur Arbeit Solange der untere Rand des Konsolenfensters nicht erreicht ist .

Unten gibt es keinen Platz mehr, um den Cursor nach unten zu bewegen, also bewegt er sich einfach nach links (mit der CR de CRLF ) und die zuvor gedruckte Zeile wird vom Anfang an überschrieben.

2voto

T3RR0R Punkte 2530

Für Windows 10 mit virtuelle Terminalsequenzen gibt es die Möglichkeit, die Cursorposition in hohem Maße zu kontrollieren.

Um die Escape-Sequenz 0x1b zu definieren, kann Folgendes verwendet werden:

@Echo off
 For /f %%a in ('echo prompt $E^| cmd')Do set \E=%%a

Um einen einzelnen Zeilenumbruch zwischen Strings auszugeben:

<nul set /p "=Hello%\E%[EWorld"

Zur Ausgabe n Zeilenumbrüche wo n wird durch eine ganze Zahl ersetzt:

<nul set /p "=%\E%[nE"

Viele

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X