Wie kann ich eine neue Zeile in einen Befehl cmd.exe einfügen?


23

Ich versuche, einen Befehl cmd.exemit einem Zeilenumbruch oder einer neuen Zeile als Teil des Befehls wie folgt auszuführen :

command -option:text  
whatever

Aber jede neue Zeile führt den Befehl aus, anstatt den Befehl in der nächsten Zeile fortzusetzen.

Wie kann ich ein neues Zeilenzeichen eingeben oder einen mehrzeiligen Befehl in cmd.exe erstellen?



Antworten:


19

Verwenden Sie den ^Charakter als Flucht:

command -option:text^

whatever

Ich gehe davon aus, dass Sie cmd.exe von Windows XP oder ähnlichem verwenden. Dies ist kein tatsächliches DOS. Wenn Sie aktuelles DOS verwenden (MS-DOS, Win3.1, Win95, Win98, WinME), dann glaube ich nicht, dass es einen Ausweg für Zeilenumbrüche gibt. Sie müssten eine benutzerdefinierte Shell ausführen. cmd.exe fordert Sie zur Eingabe von "More?" Jedes Mal, wenn Sie die Eingabetaste mit einem ^am Ende der Zeile drücken, drücken Sie die Eingabetaste erneut, um eine neue Zeile zu schließen / einzubetten.


Zu cool, das wusste ich nicht.
TJ Crowder

1
Das, was Sie vorschlagen, ist, dass ich mehr Text in eine neue Zeile eingeben kann. Der Zeilenumbruch bleibt nicht erhalten. Was ich will, ist, dass zwischen "Text" und "was auch immer" eine neue Zeile steht. Etwa so: "text \ nwhatever"
Rudimenter

Ich glaube, Sie müssen zwei Zeilenvorschübe verwenden, um das zu tun, mein Unglück, weil ich das in meinem ursprünglichen Beitrag (jetzt bearbeitet)
Darth Android

1
Wenn Sie Leerzeichen im Text haben, müssen Sie diese in Anführungszeichen setzen. Stellen Sie außerdem sicher, dass Sie das Endzitat einfügen, da sonst das Caret als Escape-Zeichen ignoriert und wie Text behandelt wird. Schließlich müssen Sie den Text in jeder Zeile, die Leerzeichen enthält, in Anführungszeichen setzen (auch wenn sie aus Sicherheitsgründen keine Leerzeichen enthält) und nach dem schließenden Anführungszeichen für jede weitere Zeile ein Caret setzen.
Synetech

1
Am Ende habe ich versucht, Zeilenumbrüche in die Kommentare eines SHUTDOWN.EXEBefehls einzufügen . Ich habe am Ende so etwas verwendet: shutdown -s -t 900 -c "foo bar"^ > Mehr? "baz"^ > Mehr? "test that."Es funktionierte.
Synetech

4

Verwenden Sie Alt-Codes mit dem Nummernblock

C:\>ver

Microsoft Windows [Version 6.3.9600]

C:\>echo Line1◙Line2 >con
Line1
Line2

C:\>

Dieses Zeilenvorschubzeichen kann mit dem Nummernblock als Alt-Code auf der CLI eingegeben werden: Halten Sie bei aktivierter NumLock-Taste die ALT-Taste gedrückt und geben Sie 10 auf dem Nummernblock ein, bevor Sie die ALT-Taste loslassen. Wenn Sie auch die CR benötigen, geben Sie beide mit Alt + 13 und dann Alt + 10 ein:♪◙

Hinweis: Dies funktioniert nicht in einer Batch-Datei.

Beispielanwendungsfall:

Sie versuchen, die Umgebungsvariablen% PATH% oder% CLASSPATH% zu lesen, um einen schnellen Überblick darüber zu erhalten, was in welcher Reihenfolge vorhanden pathist. Die zurückgegebene Textwand ist jedoch nicht lesbar. Dann können Sie dies schnell eingeben:

echo %path:;=◙% >con

Bearbeiten:

Es wurde die >conProblemumgehung hinzugefügt, die Brent Rittenhouse für neuere Versionen von cmd.exe entdeckte, bei denen die ursprüngliche Methode nicht mehr funktionierte.


Das scheint bei mir nicht zu funktionieren. Am Ende habe ich es geschafft e2 99 aa e2 97 99. Irgendeine Art von Unicode-Code-Punkt? Ich sehe jedoch, dass die Zeichen in der Befehlszeile eingegeben werden. Irgendwelche Vorschläge?
Brad

@Brad Ich kann bestätigen, dass es in der neuen cmd.exe in Windows 10 anscheinend nicht mehr funktioniert und auch meine alte Windows 7-Box sich nicht mehr so ​​verhält.
Amit Naidu

Seltsam! Ich frage mich, ob ich eine alte cmd.exe von etwas ausgraben kann ...
Brad

@ Brad, ich habe gerade einige Dinge ausprobiert und festgestellt, dass Sie dieses alte Verhalten erhalten können, wenn Sie in den Konsoleneigenschaften zu Raster-Schriftarten anstatt zu Lucida- und True-Type-Schriftarten wechseln und das Kontrollkästchen Use legacy consoleaktivieren. Aber auf einem hochauflösenden Monitor sieht es wirklich schlecht aus.
Amit Naidu

1
Eigentlich denke ich, dass ich eine Lösung gefunden habe, die in JEDER Schriftart funktioniert! Wenn Sie einfach die Zeile mit Alt-10-Zeichen ausgeben und dann auf CON umleiten, funktioniert es! Beispiel: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONDie umgebende Klammer ist optional. Hier ist ein robustes Beispiel dafür , was man mit diesem tun kann (und Zeilenumbrüchen , die jetzt Arbeit und völlig unabhängig!): I.imgur.com/qqN37PH.png
Brent Rittenhouse

1

Ich weiß nicht, ob dies für Sie funktionieren wird, aber durch Setzen von & Echo (der folgende Raum ist wichtig). dazwischen jede Anweisung, die Sie in einer neuen Zeile möchten. Ich habe das nur mit einer einfachen Fledermausfeile ausprobiert

echo %1

Dann speichere das als testNewLines.bat

Also dann die cmd-Zeile

testNewLines first line&echo Second Line&echo Third line

Führt dazu, dass das Folgende zurückgesendet wird

erste Zeile
zweite Zeile
Dritte Zeile


1

Erweitern auf Amits Antwort ( /superuser//a/1132659/955256 ) Ich habe eine Möglichkeit gefunden, dies in einer beliebigen Schriftart zu tun, OHNE die Legacy-Konsole zu verwenden.

Alles, was Sie tun müssen, ist einfach die Zeile mit Alt-10-Zeichen auszugeben conund sie dann umzuleiten, und es wird funktionieren!

Zum Beispiel gegeben:

(Echo New-Line Detected Rigghhhtt ◙ ^ <--- HIER!)> CON

edit: Lustige Tatsache, es scheint, dass Sie die Umleitung am Anfang so setzen können:

> CON echo New-line detect rigghhhtt ◙ ^ <--- HIER!

Komisch, was?

Sie erhalten eine Ausgabe von:


New-line detected rigghhhtt  
<-- HERE!

(Die umgebende Klammer ist optional.)

Hier ist ein robusteres Beispiel dafür, was Sie mit diesem AND-Wagenrücklauf machen können, der jetzt funktioniert und völlig unabhängig ist:

Das Beste ist, dass dies funktioniert, wenn Sie auch zu einer Datei umleiten!
(einfach wechseln > CONzu> desired_output_file.txt

Genießen!


1

Die Ausgabe von ^ ist speicherbar

set br= ^
<</br (newline)>>
<</br>>

Beispiel:

@echo off
setlocal enableExtensions enableDelayedExpansion
rem cd /D "%~dp0"


rem //# need 2 [/br], can't be saved to a var. by using %..%;
set br= ^



set "t=t1!br!t2!br!t3"

for /f "tokens=* delims=" %%q in ("!t!") do (
    echo %%q
)


:scIn
rem endlocal
pause
rem exit /b

; Ausgabe:

t1
t2
t3
Press any key to continue . . .

0

Ich glaube, Sie können das nicht von der Windows- cmd.exeShell aus tun . ( Es ist nicht DOS. )


Sie benötigen dafür keine vollständige "benutzerdefinierte Shell". Sie müssen nur so etwas schreiben (Beispiel in Python ):

import subprocess
subprocess.call(["C:\\bin\\sometool.exe", "test\nwith\nnewlines"])

Oder Ruby:

Kernel::exec "C:\\bin\\sometool.exe", "test\nwith\nnewlines"

Sehen Sie, es ist nicht so schwer.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.