Bei der Ausgabe von Statusmeldungen von einer Windows-Stapeldatei an die Konsole möchte ich Leerzeilen ausgeben, um die Ausgabe zu unterbrechen. Wie mache ich das?Echo einer leeren (leeren) Zeile von einer Windows-Stapeldatei zur Konsole
Antwort
Hinweis: Obwohl meine ursprüngliche Antwort mehrere upvotes angezogen, habe ich beschlossen, dass ich viel besser machen könnte. Sie können meine ursprüngliche (vereinfachende und fehlgeleitete) Antwort in der Bearbeitungshistorie finden.
Wenn Microsoft die Möglichkeit hatte, eine leere Zeile aus cmd.exe
auszugeben, hätte Microsoft sicherlich eine so einfache Operation dokumentiert. Es ist diese Unterlassung, die mich motiviert hat, diese Frage zu stellen.
Also, da ein Mittel, um eine leere Zeile von cmd.exe
zur Ausgabe ist nicht dokumentiert, wohl sollte man jeden Vorschlag für überlegen, wie dies zu erreichen, ein hacken zu sein. Das bedeutet, dass es kein bekanntes Verfahren zum Ausgeben einer Leerzeile von cmd.exe
gibt, das garantiert ist, um in alle Situationen zu arbeiten (oder effizient zu arbeiten).
Vor diesem Hintergrund wird im Folgenden eine Beschreibung der Methoden gegeben, die für die Ausgabe einer Leerzeile von cmd.exe
empfohlen wurden. Alle Empfehlungen basieren auf Variationen des Befehls echo
.
echo.
Während dies in vielen funktionieren wird, wenn nicht die meisten Situationen, es vermieden werden sollte, weil es langsamer als seine Alternativen ist und nicht tatsächlich (siehe here, here und here). Genauer sucht cmd.exe
zuerst nach einer Datei mit dem Namen echo
und versucht, sie zu starten. Wenn eine Datei mit dem Namen echo
im aktuellen Arbeitsverzeichnis existieren geschieht, wird echo.
scheitern mit:
'echo.' is not recognized as an internal or external command,
operable program or batch file.
echo:
echo\
Am Ende this answer, argumentiert der Autor, dass diese Befehle langsam sein können, zum Beispiel wenn sie von einem Netzwerklaufwerk ausgeführt werden. Ein besonderer Grund für die mögliche Langsamkeit ist nicht gegeben. Aber man kann daraus schließen, dass es etwas mit dem Zugriff auf das Dateisystem zu tun haben könnte. (Vielleicht, weil :
und \
haben eine besondere Bedeutung in einem Dateisystempfad von Windows?)
jedoch einige können diese betrachten sichere Optionen zu sein, da :
und \
kann nicht in einem Dateinamen angezeigt. Aus diesem oder einem anderen Grund wird echo:
von SS64.com here empfohlen.
echo(
echo+
echo,
echo/
echo;
echo=
echo[
echo]
This lengthy discussion enthält, was ich glaube, dass alle von diesen sein. Einige dieser Optionen werden auch in this SO answer empfohlen.Innerhalb der zitierten Diskussion endet this post mit dem, was eine Empfehlung für echo(
und echo:
zu sein scheint.
Meine Frage oben auf dieser Seite gibt keine Version von Windows an. Meine Experimente unter Windows 10 zeigen an, dass alle von diesen eine leere Zeile erzeugen, unabhängig davon, ob die Dateien echo
, echo+
, echo,
, ..., echo]
im aktuellen Arbeitsverzeichnis vorhanden sind. (Beachten Sie, dass meine Frage nach der Veröffentlichung von Windows früher 10. So zugeben ich die Möglichkeit, dass ältere Versionen von Windows unterschiedlich verhalten.)
In this answer, @jeb behauptet, dass echo(
immer funktioniert. Für mich bedeutet @jebs Antwort, dass andere Optionen weniger zuverlässig sind, aber keine Details darüber enthalten, warum dies der Fall sein könnte. Beachten Sie, dass @jeb viel wertvollen Inhalt zu anderen Referenzen beigetragen hat, die ich in dieser Antwort zitiert habe.
Fazit:echo.
nicht anwenden. Von den vielen anderen Möglichkeiten begegnete ich in den Quellen, die ich zitiert habe, die Unterstützung für diese beiden erscheint maßgeblichsten:
echo(
echo:
Aber ich habe keine starke Hinweise darauf, dass die Verwendung von entweder von ihnen werden immer störungs- sein gefunden frei.
Verwendungsbeispiel:
@echo off
echo Here is the first line.
echo(
echo There is a blank line above this line.
Erwartete Ausgabe:
Here is the first line.
There is a blank line above this line.
Es ist oft die Spitze zu verwenden, 'Echo'.
Aber das ist langsam, und es könnte mit einer Fehlermeldung fehlschlagen, da cmd.exe zuerst nach einer Datei mit dem Namen 'echo' (ohne Erweiterung) sucht und nur wenn die Datei nicht existiert eine leere Zeile ausgibt .
Sie könnten echo(
verwenden. Dies ist ungefähr 20 mal schneller und es funktioniert immer. Der einzige Nachteil könnte sein, dass es seltsam aussieht.
Weitere Informationen zu den verschiedenen ECHO:/\
Varianten finden Sie unter DOS tips: ECHO. FAILS to give text or blank line.
Haben Sie eine Quelle, die dieses Problem hervorhebt? –
IMHO ist es völlig sinnlos, sich um die Geschwindigkeit im Batch zu kümmern - wenn Ihr Leistungsengpass in einer Batchdatei liegt, versuchen Sie nicht, sie zu optimieren - Sie werfen sie weg, um sie in einer echten Sprache zu schreiben. –
@MatteoItalia, Es hat nichts mit Geschwindigkeit zu tun. Wenn es etwas extra macht (suche zuerst nach einer Datei namens echo ohne Erweiterung), dann ist es falsch und wenn es eine Datei als solche gibt, wird sie tatsächlich fehlschlagen. Zusätzliche Punkte, wenn der Batchjob an einem Wochenende fehlschlägt, während alle hart im Halbfinale feiern. – Pacerier
arbeitet Jede der folgenden drei Optionen für Sie:
echo[
echo(
echo.
Zum Beispiel:
@echo off
echo There will be a blank line below
echo[
echo Above line is blank
echo(
echo The above line is also blank.
echo.
echo The above line is also blank.
Vorsichtig, "echo." funktioniert möglicherweise nicht, siehe die Kommentare unter http://stackoverflow.com/ Fragen/132799/How-Can-Sie-Echo-ein-Newline-in-Batch-Dateien # comment51325122_3123194 – Pacerier
Ich glaube nicht, dass die Frage [Wie können Sie eine neue Zeile in Batch-Dateien echo?] (http://StackOverflow.com/q/132799/1497596) ist ein Duplikat dieser Frage. Die Essenz dieser Frage ist: ** Wie kann ich mit einer einzigen "echo" -Anweisung zwei Textzeilen mit einem Zeilenumbruch zwischen ihnen ausgeben? ** Das heißt, einige der Antworten auf diese Frage beziehen sich auch auf die Ausgabe leer (leere) Linien. – DavidRR
Da dieser Beitrag keine Antworten mehr akzeptiert ... Die richtige Antwort ist 'echo:' laut dem folgenden Link. http://ss64.com/nt/echo.html – H2ONaCl
In der Zusammenfassung des ss64-Links, der für 'echo' gepostet wird ...' echo.' sucht nach einer Datei namens 'echo' und erzeugt nur eine Leerzeile, wenn eine solche Datei nicht existiert. Diese Eigenschaft macht 'echo.' langsamer und weniger robust als 'echo:'. – u8it