Wie können Sie eine neue Zeile aus Ihrer Batchdatei-Ausgabe einfügen?
Ich möchte so etwas tun wie:
echo hello\nworld
Welches würde ausgeben:
hello
world
windows
batch-file
newline
Brian R. Bondy
quelle
quelle
echo Yes&echo No
Antworten:
echo hello & echo.world
Dies bedeutet, dass Sie
& echo.
eine Konstante für eine neue Zeile definieren können\n
.quelle
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
echo(
verbesserte Leistung (immer noch ohne Platz). Erweiterte Diskussion anderer Charaktere und ihrer Vorzüge / Mängel bei ECHO. Fehler beim Geben von Text oder Leerzeichen - Verwenden Sie stattdessen ECHO /Verwenden:
quelle
echo "Makefile contents (which has \n)" > Makefile
Mit mehreren Echos würde es nicht funktionieren(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
und dannecho line 2 >> Makefile
. Durch die Verwendung von>>
wird die Ausgabe an die Datei angehängt. Dies ist genau das Verhalten, das Sie für diesen Fall benötigen.Erstellen Sie eine .bat-Datei mit den folgenden Angaben:
Sie sollten die folgende Ausgabe sehen:
Sie benötigen natürlich nur den Code zwischen den REM-Anweisungen.
quelle
set nl=^&echo.
,echo hello %nl% world
ergibt dann nur den gleichen Effekt.echo:
In cmd / bat-Dateien gibt es eine Standardfunktion zum Schreiben von Leerzeilen, die eine neue Zeile in Ihrer cmd-Ausgabe emuliert:Ausgabe der oben genannten cmd-Datei:
quelle
echo(
. Es sieht so aus, als könnte es Probleme verursachen, aber es funktioniert tatsächlich perfekt. Alle anderen Formulare haben mindestens eine Situation, in der der Befehl nicht wie gewünscht ausgeführt wird.ECHO(
fehlschlägt.echo
und welche Auswirkungen haben sie?"Wie die Antwort von Ken, aber mit der Verwendung der verzögerten Erweiterung.
Zuerst wird ein einzelnes Zeilenvorschubzeichen erstellt und der Variablen \ n zugewiesen.
Dies funktioniert, wenn das Caret am Zeilenende versucht, dem nächsten Zeichen zu entkommen. Wenn es sich jedoch um einen Zeilenvorschub handelt, wird dieser ignoriert und das nächste Zeichen wird gelesen und maskiert (auch wenn dies auch ein Zeilenvorschub ist).
Dann benötigen Sie einen dritten Zeilenvorschub, um den aktuellen Befehl zu beenden. Andernfalls wird die dritte Zeile an die LF-Variable angehängt.
Sogar Batch-Dateien haben Zeilenenden mit CR / LF, nur die LF sind wichtig, da die CRs in dieser Phase des Parsers entfernt werden.
Der Vorteil der verzögerten Erweiterung besteht darin, dass überhaupt keine Sonderzeichenbehandlung erfolgt.
echo Line1%LF%Line2
würde fehlschlagen, da der Parser das Parsen bei einzelnen Zeilenvorschüben beendet.Weitere Erklärungen finden Sie unter
SO: Lange Befehle, die in der Vista / DOS-Batchdatei (.bat) über mehrere Zeilen verteilt sind.
SO: Wie analysiert der Windows Command Interpreter (CMD.EXE) Skripts?
Bearbeiten: Vermeiden
echo.
Dies beantwortet die Frage nicht, da es sich um eine einzelne Frage handelt, die
echo
mehrere Zeilen ausgeben kann.Trotz der anderen Antworten, die die Verwendung von
echo.
zum Erstellen einer neuen Zeileecho.
vorschlagen, sollte beachtet werden, dass dies das Schlimmste ist, da es sehr langsam ist und vollständig fehlschlagen kann, da cmd.exe nach einer Datei mit dem Namen suchtECHO
und versucht, sie zu starten.Zum Drucken nur einer leeren Zeile können Sie eine von verwenden
Aber die Verwendung von
echo.
,echo\
oderecho:
sollte vermieden werden, da sie wirklich langsam sein können, abhängig von der Stelle , wo das Skript ausgeführt werden, wie ein Netzlaufwerk.quelle
call :pause line1!\n!line2
beginnen Sie die Unterroutine mitsetlocal EnableDelayedExpansion
und beenden Sie sie mitsetlocal DisableDelayedExpansion
, um zu verhindern, dass die Zeilenumbrüche vorzeitig interpretiert werden.echo,
echo;
echo(
echo/
echo+
echo=
und die Schurkengalerieecho.
echo\
echo:
. Wenn Sie jetzt erklären würden, warum zum Teufel diese Arbeit, würde ich Ihnen ein Freibier schulden.echo.
Genug gesagt.Wenn Sie es in einer einzelnen Zeile benötigen, verwenden Sie die
&
. Zum Beispiel,würde ausgeben als:
Sagen Sie jetzt, Sie wollen etwas schickeres, ...
Ausgänge
Dann werfen
%n%
Sie einfach eine ein, wann immer Sie eine neue Zeile in einer Echo-Anweisung wünschen. Dies kommt Ihrer\n
Verwendung in verschiedenen Sprachen näher .Nervenzusammenbruch
set n=
setzt die Variablen
gleich:^
Nullt das nächste folgende Symbol aus:&
Bedeutet, einen anderen Befehl in derselben Zeile auszuführen. Wir kümmern uns nicht um die Fehlerstufe (es ist eine Echo-Aussage für lautes Schreien), daher wird keine&&
benötigt.echo.
Setzt die Echo-Anweisung fort.All dies funktioniert, weil Sie tatsächlich Variablen erstellen können, die Code sind, und diese in anderen Befehlen verwenden können. Es ist eine Art Ghetto-Funktion, da Batch nicht gerade die fortschrittlichste Shell-Skriptsprache ist. Dies funktioniert nur, weil der Batch Variablen nicht richtig verwendet und nicht zwischen Ints, Zeichen, Floats, Strings usw. angegeben wird.
Wenn Sie schlau sind, können Sie dies dazu bringen, mit anderen Dingen zu arbeiten. Verwenden Sie diese Option beispielsweise, um eine Registerkarte wiederzugeben
quelle
echo.
Sie diese Option nicht , wenn Sie zuerst versuchen, eine Datei mit diesem Namen zu finden. Verwenden Sie andere Interpunktion, wieecho,
Wenn Sie etwas wiederholen, um es in eine Datei umzuleiten, funktionieren mehrere Echo-Befehle nicht. Ich denke, vielleicht ist der ">>" Redirector eine gute Wahl:
quelle
(echo hello && echo world) > temp
Erwähnt von Nathan J. Brauer in einem Kommentar zu den (aktuell) akzeptierten Antwortwerken.Genau wie Grimtron vorschlägt - hier ist ein kurzes Beispiel, um es zu definieren:
Ausgabe
quelle
echo hello %newline%world
Zeile wiederholen , gibt es keine Leerzeichen dazwischen.echo "Hello %newline% world"
schlägt fehl, da es in Anführungszeichen steht. Weil es keine echte Newline ist.Wenn Sie Ergebnisse in eine Datei einfügen müssen, können Sie verwenden
quelle
Sie können auch so tun,
Die Ausgabe wird sein,
Beachten Sie, dass '%' verdoppelt wird, wenn dies in eine Batch-Datei eingefügt wird.
quelle
*
charWenn jemand hierher kommt, weil er eine leere Zeile aus einem MINGW-Makefile wiedergeben möchte, habe ich verwendet
@cmd /c echo.
Einfaches Verwenden
echo.
verursacht die gefürchteteprocess_begin: CreateProcess(NULL, echo., ...) failed.
Fehlermeldung.Ich hoffe das hilft mindestens einer anderen Person da draußen :)
quelle
Wenn Sie in Zeichenfolgenliteralen, die an eine Variable übergeben werden können, berühmte \ n verwenden müssen, schreiben Sie möglicherweise einen Code wie im folgenden Hello.bat- Skript:
Auf diese Weise kann die mehrzeilige Ausgabe an einem Ort, sogar in einem anderen Skript oder einer externen Datei, vorbereitet und an einem anderen gedruckt werden.
Der Zeilenumbruch wird in der Zeilenumbruchvariablen gehalten . Der Wert muss ersetzt werden , nachdem die Echolinie 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 Inhalt (Look für Syntax bei Hilfe - Set ). Wir könnten natürlich ! Newline! während der Einstellung Antwort aber \ n ist bequemer. Es kann von außen übergeben werden (versuchen Sie es mit Hello R2 \ nD2 ), wobei niemand den Namen der Variablen kennt, die den Zeilenumbruch enthält (Ja, Hello C3! Newline! P0) funktioniert genauso).
Das obige Beispiel kann zu einem Unterprogramm oder einer eigenständigen Charge verfeinert werden, die wie folgt verwendet wird
call:mlecho Hi\nI'm your comuter
:Bitte beachten Sie, dass ein zusätzlicher Backslash das Skript nicht daran hindert, \ n Teilzeichenfolgen zu analysieren.
quelle
Dies hat bei mir funktioniert, keine verzögerte Erweiterung notwendig:
Es schreibt Ausgabe wie folgt:
quelle
echo asdf >myfile.txt
liefert genau die gleichen Ergebnisse.echo
Hängt eine neue Zeile an das Ende der Zeichenfolge an.Um eine neue Zeile im Stapel zu starten, müssen Sie lediglich "echo [" hinzufügen, wie folgt:
quelle
echo[.bat
echo.
ist auch eine schlechte Lösung.echo.
. Von mir zu erwarten, dass Benutzer Ihres Skripts Dateien auf ihrem System löschen, nur weil Ihr Skript eine neue Zeile benötigt, klingt für mich nicht nach gutem Design.Ken- und Jeb-Lösungen funktionieren gut.
Die neuen Zeilen werden jedoch nur mit einem LF-Zeichen generiert, und ich benötige CRLF-Zeichen (Windows-Version).
Zu diesem Zweck habe ich am Ende des Skripts LF in CRLF konvertiert.
Beispiel:
quelle
Sie können verwenden
@echo
(@echo + [Leerzeichen] + [unsicheres Leerzeichen])Hinweis: Der unsichere Speicherplatz kann mit Alt + 0160 abgerufen werden
Ich hoffe es hilft :)
[Bearbeiten] Hmm du hast recht, ich brauchte es in einem Makefile, es funktioniert dort perfekt. Ich denke, meine Antwort ist nicht für Batch-Dateien angepasst ... Mein schlechtes.
quelle
ECHO ist eingeschaltet (ON).
keine leere Zeile bekommen, versucht an der cmd-EingabeaufforderungDiese Lösung funktioniert (getestet):
Dies wandelt isolierte Zeilenvorschübe in eine Wagenrücklauf-Zeilenvorschubkombination um.
quelle
echo hello \n world
Ich kann es nicht einfacher machen als:
quelle