Jak wstawić nową linię do polecenia cmd.exe?

23

Próbuję wykonać polecenie cmd.exez podziałem wiersza lub nową linią jako częścią polecenia, jak poniżej:

command -option:text  
whatever

Ale każda nowa linia wykonuje polecenie, zamiast kontynuować polecenie w następnym wierszu.

Jak więc wprowadzić nowy znak linii lub utworzyć polecenie wieloliniowe w cmd.exe?

Rudimenter
źródło

Odpowiedzi:

19

Użyj ^postaci jako ucieczki:

command -option:text^

whatever

Zakładam, że używasz cmd.exe z Windows XP lub podobnego. To nie jest rzeczywisty DOS. Jeśli używasz rzeczywistego DOS (MS-DOS, Win3.1, Win95, Win98, WinME), to nie wierzę, że istnieje ucieczka dla nowych linii. Będziesz musiał uruchomić niestandardową powłokę. cmd.exe wyświetli monit o „Więcej?” za każdym razem, gdy naciśniesz klawisz Enter ^na końcu linii, po prostu ponownie naciśnij klawisz Enter, aby faktycznie uciec / osadzić nową linię.

Darth Android
źródło
Zbyt fajnie, nie wiedziałem o tym.
TJ Crowder
1
To, co sugerujesz, pozwala mi wprowadzić więcej tekstu w nowym wierszu. Nie zachowuje nowej linii. Chcę, żeby między „tekstem” a „czymkolwiek” była nowa linia. Coś w tym rodzaju: „tekst \ nokolwiek”
rudimenter
Uważam, że musisz użyć do tego dwóch nowych linii, mój zły, że nie zdawałem sobie z tego sprawy w moim oryginalnym poście (teraz edytowanym)
Darth Android
1
Należy zauważyć, że jeśli masz spacje w tekście, musisz zawinąć je w cudzysłowy. Ponadto upewnij się, że podałeś cytat końcowy, w przeciwnym razie znak zostanie zignorowany jako znak zmiany znaczenia i traktowany jak tekst. Na koniec musisz wstawić cudzysłowy wokół tekstu w każdym wierszu zawierającym spacje (rób to, nawet jeśli nie zawiera spacji, aby zachować bezpieczeństwo), i wstaw karetkę po cudzysłowie zamykającym dla każdej kontynuowanej linii.
Synetech
1
Skończyłem tutaj, próbując znaleźć sposób na wstawienie nowego wiersza w komentarzach SHUTDOWN.EXEpolecenia. Skończyło się na użyciu czegoś takiego: shutdown -s -t 900 -c "foo bar"^ > Więcej? "baz"^ > Więcej? "test that."Zadziałało.
Synetech
4

Używaj kodów Alt z klawiaturą numeryczną

C:\>ver

Microsoft Windows [Version 6.3.9600]

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

C:\>

Ten znak przejścia do wiersza można wprowadzić jako kod Alt w interfejsie CLI za pomocą klawiatury numerycznej: przy włączonym NumLock przytrzymaj klawisz ALT i wpisz 10 na klawiaturze numerycznej przed zwolnieniem klawisza ALT. Jeśli potrzebujesz również CR, wpisz je z kombinacją Alt + 13, a następnie Alt + 10:♪◙

Uwaga: to nie zadziała w pliku wsadowym.

Przykładowy przypadek użycia:

Próbujesz odczytać zmienne środowiskowe% PATH% lub% CLASSPATH%, aby uzyskać szybki przegląd tego, co tam jest i w jakiej kolejności - ale zwrócona ściana tekstu pathjest nieczytelna. To jest coś, co możesz szybko wpisać:

echo %path:;=◙% >con

Edytować:

Dodano >conobejście, które Brent Rittenhouse odkrył dla nowszych wersji cmd.exe, w którym oryginalna metoda przestała działać.

Amit Naidu
źródło
Wydaje mi się, że to nie działa. Skończyło się na tym, że e2 99 aa e2 97 99przeszedłem. Jakiś punkt kodu Unicode? Widzę jednak, że znaki pojawiają się w linii poleceń. Jakieś sugestie?
Brad
@Brad Mogę potwierdzić, że wydaje się, że nie działa już w nowym cmd.exe w systemie Windows 10 i nawet moje stare okno systemu Windows 7 nie będzie już tak działać.
Amit Naidu
Dziwne! Zastanawiam się, czy mogę wykopać z czegoś stary cmd.exe ....
Brad
@Brad, po prostu próbowałem i niewiele rzeczy, i zdałem sobie sprawę, że możesz uzyskać to stare zachowanie, jeśli przejdziesz do czcionek rastrowych we właściwościach konsoli, zamiast czcionek Lucida i True Type i zaznaczysz pole Use legacy consolewyboru. Ale wygląda naprawdę źle na monitorze o wysokiej rozdzielczości.
Amit Naidu
1
Właściwie wydaje mi się, że znalazłem rozwiązanie, które działa całkowicie w KAŻDEJ czcionce! Jeśli po prostu wyślesz echo wiersza ze znakami alt-10, a następnie przekierujesz go do CON, to zadziała! Na przykład: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONotaczający nawias jest opcjonalny. Oto bardziej solidny przykład tego, co możesz z tym zrobić (ORAZ zwroty karetki, które teraz działają i całkowicie niezależnie!): I.imgur.com/qqN37PH.png
Brent Rittenhouse
1

Nie wiem, czy to zadziała dla ciebie, ale poprzez wstawienie & echo (ważna jest następująca spacja). pomiędzy każdą instrukcją, którą chcesz w nowym wierszu. Próbowałem tego tylko z prostym plikiem nietoperzy

echo %1

Następnie zapisałem to jako testNewLines.bat

Więc potem linia cmd

testNewLines first line&echo Second Line&echo Third line

Powodowało to echo z powrotem

pierwsza linia
druga linia
Trzecia linia

Haydar
źródło
1

Rozwijając odpowiedź Amita ( /superuser//a/1132659/955256 ) Znalazłem sposób na zrobienie tego w dowolnej czcionce BEZ korzystania ze starszej konsoli.

Wszystko, co musisz zrobić, to po prostu wyśledzić linię ze znakami alt-10, a następnie przekierować ją do coni to zadziała!

Na przykład biorąc pod uwagę:

(echo Wykryto nową linię rigghhhtt ◙ ^ <--- TUTAJ!)> CON

edytuj: Zabawne, wydaje się, że możesz umieścić przekierowanie na początku tak:

> CON echo Wykryto nową linię rigghhhtt ◙ ^ <--- TUTAJ!

Dziwne, co?

Otrzymasz wynik:


New-line detected rigghhhtt  
<-- HERE!

(Nawias otaczający jest opcjonalny).

Oto bardziej niezawodny przykład tego, co można zrobić za pomocą ORAZ zwrotów karetki, które teraz działają i całkowicie niezależnie !:

Co najlepsze, działa to również w przypadku przekierowania do pliku!
(po prostu zmień > CONna> desired_output_file.txt

Cieszyć się!

Brent Rittenhouse
źródło
1

Dane wyjściowe ^ można zapisać

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

przykład:

@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

; wynik:

t1
t2
t3
Press any key to continue . . .
ilias
źródło
0

Uważam, że nie można tego zrobić z poziomu cmd.exepowłoki systemu Windows . ( To nie jest DOS. )


Nie potrzebujesz do tego pełnej „niestandardowej powłoki”. Musisz tylko napisać coś takiego (przykład w Pythonie ):

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

Lub Ruby:

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

Widzisz, to nie jest takie trudne.

użytkownik1686
źródło