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
echo Yes&echo No
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
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
.
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:
echo hello
echo.
echo world
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 dann echo 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:
@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 die folgende Ausgabe sehen:
There should be a newline
inserted here.
Press any key to continue . . .
Sie benötigen natürlich nur den Code zwischen den REM-Anweisungen.
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:
@echo off
@echo line1
@echo:
@echo line2
Ausgabe der oben genannten cmd-Datei:
line1
line2
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.
setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)
echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"
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 Zeile echo.
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 sucht ECHO
und versucht, sie zu starten.
Zum Drucken nur einer leeren Zeile können Sie eine von verwenden
echo,
echo;
echo(
echo/
echo+
echo=
Aber die Verwendung von echo.
, echo\
oder echo:
sollte vermieden werden, da sie wirklich langsam sein können, abhängig von der Stelle , wo das Skript ausgeführt werden, wie ein Netzlaufwerk.
call :pause line1!\n!line2
beginnen Sie die Unterroutine mit setlocal EnableDelayedExpansion
und beenden Sie sie mit setlocal DisableDelayedExpansion
, um zu verhindern, dass die Zeilenumbrüche vorzeitig interpretiert werden.
echo,
echo;
echo(
echo/
echo+
echo=
und die Schurkengalerie echo.
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,
echo Line 1 & echo. & echo line 3
würde ausgeben als:
Line 1
line 3
Sagen Sie jetzt, Sie wollen etwas schickeres, ...
set n=^&echo.
echo hello %n% world
Ausgänge
hello
world
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 Variable n
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
set t=^&echo. ::there are spaces up to the double colon
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:
echo hallo> temp Echo Welt >> Temp
(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:
@echo off
set newline=^& echo.
echo hello %newline%world
C:\>test.bat
hello
world
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.
Sie können auch so tun,
(for %i in (a b "c d") do @echo %~i)
Die Ausgabe wird sein,
a
b
c d
Beachten Sie, dass '%' verdoppelt wird, wenn dies in eine Batch-Datei eingefügt wird.
(for %%i in (a b "c d") do @echo %%~i)
Wenn 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ürchtete process_begin: CreateProcess(NULL, echo., ...) failed.
Fehlermeldung.
Ich hoffe das hilft mindestens einer anderen Person da draußen :)
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:
@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 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
:
: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, \ n Teilzeichenfolgen zu analysieren.
Dies hat bei mir funktioniert, keine verzögerte Erweiterung notwendig:
@echo off
(
echo ^<html^>
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause
Es schreibt Ausgabe wie folgt:
<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
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:
echo Hi!
echo[
echo Hello!
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:
TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
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.
ECHO ist eingeschaltet (ON).
keine leere Zeile bekommen, versucht an der cmd-Eingabeaufforderung
Diese Lösung funktioniert (getestet):
type nul | more /e /p
Dies wandelt isolierte Zeilenvorschübe in eine Wagenrücklauf-Zeilenvorschubkombination um.
echo hello \n world