Jak wstawić nowy wiersz z pliku wyjściowego pliku wsadowego?
Chcę zrobić coś takiego:
echo hello\nworld
Co da wynik:
hello
world
windows
batch-file
newline
Brian R. Bondy
źródło
źródło
echo Yes&echo No
Odpowiedzi:
echo hello & echo.world
Oznacza to, że możesz zdefiniować
& echo.
jako stałą dla nowego wiersza\n
.źródło
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
echo(
celu zwiększenie wydajności (wciąż nie zwracając uwagi na przestrzeń). Rozszerzona dyskusja o innych postaciach i ich zaletach / wadach w ECHO. NIE MOŻE podać tekstu lub pustej linii - zamiast tego użyj ECHO /Posługiwać się:
źródło
echo "Makefile contents (which has \n)" > Makefile
wielu ech, to nie zadziałałoby(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
i potemecho line 2 >> Makefile
. Użycie>>
powoduje, że dane wyjściowe są dołączane do pliku, a dokładnie takie zachowanie jest potrzebne w tym przypadku.Proszę, utwórz plik .bat zawierający następujące elementy:
Powinieneś zobaczyć dane wyjściowe takie jak:
Oczywiście potrzebny jest tylko kod między instrukcjami REM.
źródło
set nl=^&echo.
, po prostuecho hello %nl% world
daje ten sam efekt.W
echo:
plikach cmd / bat znajduje się standardowa funkcja do zapisywania pustej linii, która emuluje nową linię na wyjściu cmd:Dane wyjściowe cytowanego powyżej pliku cmd:
źródło
echo(
. Wygląda na to, że może powodować problemy, ale w rzeczywistości działa idealnie. Wszystkie pozostałe formy mają co najmniej jedną sytuację, w której polecenie nie będzie działać zgodnie z oczekiwaniami.ECHO(
zawodzi.echo
i jakie są ich efekty?”Jak odpowiedź Kena, ale z wykorzystaniem opóźnionego rozszerzenia.
Najpierw tworzony jest pojedynczy znak kanału i przypisywany do zmiennej \ n.
Działa to, gdy karetka na końcu linii próbuje uciec od następnego znaku, ale jeśli jest to podawanie linii, jest ignorowane, a następny znak jest odczytywany i wybierany (nawet jeśli jest to również podawanie linii).
Następnie potrzebujesz trzeciego kanału do zakończenia bieżącej instrukcji, w przeciwnym razie trzeci wiersz zostałby dołączony do zmiennej LF.
Nawet pliki wsadowe mają zakończenia linii z CR / LF ważne są tylko LF, ponieważ CR są usuwane w tej fazie analizatora składni.
Zaletą korzystania z opóźnionego rozszerzenia jest to, że nie ma żadnej obsługi znaków specjalnych.
echo Line1%LF%Line2
nie powiedzie się, ponieważ parser przestaje analizować przy pojedynczych liniach.Więcej wyjaśnień znajduje się w
SO: Długie polecenia podzielone na wiele wierszy w pliku wsadowym (.bat) Vista / DOS
SO: Jak analizuje skrypty interpretera poleceń systemu Windows (CMD.EXE)?
Edycja: Unikaj
echo.
To nie odpowiada na pytanie, ponieważ pytanie dotyczyło pojedynczego,
echo
który może wyprowadzać wiele wierszy.Ale pomimo innych odpowiedzi, które sugerują użycie
echo.
do utworzenia nowej linii, należy zauważyć, żeecho.
jest to najgorsze, ponieważ jest bardzo powolne i może całkowicie zawieść, ponieważ cmd.exe szuka pliku o nazwieECHO
i próbuje go uruchomić.Aby wydrukować tylko pustą linię, możesz użyć jednego z nich
Ale stosowanie
echo.
,echo\
lubecho:
powinny być unikane, ponieważ mogą one być bardzo powolny, w zależności od miejsca, w którym skrypt zostanie wykonany, jak dysk sieciowy.źródło
call :pause line1!\n!line2
Uruchom podprogram za pomocąsetlocal EnableDelayedExpansion
i zakończ go,setlocal DisableDelayedExpansion
aby nie dopuścić do przedwczesnej interpretacji nowych linii.echo,
echo;
echo(
echo/
echo+
echo=
i galerię łotrówecho.
echo\
echo:
. Teraz, jeśli miałbyś wyjaśnić, dlaczego, do cholery, te prace, byłbym ci winien darmowe piwo.echo.
Wystarczająco powiedziane.Jeśli potrzebujesz go w jednym wierszu, użyj
&
. Na przykład,wyświetli się jako:
Powiedzmy, że chcesz czegoś bardziej wyszukanego ...
Wyjścia
Następnie po prostu wrzuć
%n%
kiedy chcesz nowy wiersz w instrukcji echa. Jest to bardziej zbliżone do\n
używanego w różnych językach.Awaria
set n=
ustawia zmiennąn
równą:^
Usuwa następny symbol do naśladowania:&
Oznacza wykonanie innego polecenia w tym samym wierszu. Nie dbamy o poziom błędu (to echo instrukcji, aby głośno płakać), więc nie&&
jest potrzebny.echo.
Kontynuuje instrukcję echa.Wszystko to działa, ponieważ można faktycznie tworzyć zmienne, które są kodami, i używać ich w innych poleceniach. Jest to coś w rodzaju funkcji getta, ponieważ partia nie jest dokładnie najbardziej zaawansowanym językiem skryptowym powłoki. Działa to tylko dlatego, że wsadowo słabo używa zmiennych, nie oznacza między liczbami całkowitymi, znakami, zmiennoprzecinkowymi, łańcuchami itp.
Jeśli jesteś sprytny, możesz sprawić, aby działał z innymi rzeczami. Na przykład użycie go do wyświetlenia karty
źródło
echo.
gdy po raz pierwszy próbuje znaleźć plik o tej nazwie. Użyj innej interpunkcji, np.echo,
Gdy echo przekierowuje do pliku, wiele poleceń echa nie będzie działać. Myślę, że może przekierowanie „>>” jest dobrym wyborem:
źródło
(echo hello && echo world) > temp
wspomniany przez Nathana J. Brauera w komentarzu do (aktualnych) przyjętych odpowiedzi.Tak jak sugeruje Grimtron - oto szybki przykład, aby go zdefiniować:
Wynik
źródło
echo hello %newline%world
linię, nie ma między nimi spacji.echo "Hello %newline% world"
zawodzi, ponieważ jest w cudzysłowie. Ponieważ to nie jest prawdziwa nowa linia.Jeśli chcesz umieścić wyniki w pliku, możesz użyć
źródło
Możesz też tak zrobić,
Dane wyjściowe będą
Zauważ, że po umieszczeniu go w pliku wsadowym „%” zostanie podwojone.
źródło
*
charJeśli ktoś tu przychodzi, ponieważ chce odtworzyć pustą linię z makefile make MINGW, użyłem
@cmd /c echo.
zwykłe użycie
echo.
powoduje przerażającyprocess_begin: CreateProcess(NULL, echo., ...) failed.
komunikat o błędzie.Mam nadzieję, że pomoże to przynajmniej jednej innej osobie :)
źródło
Jeśli trzeba użyć słynnego \ n w literałach ciągów, które można przekazać do zmiennej, można napisać kod jak w skrypcie Hello.bat poniżej:
W ten sposób wyjście wielowierszowe można przygotować w jednym miejscu, nawet w innym pliku scritpt lub zewnętrznym, i wydrukować w innym.
Podział linii jest utrzymywany w zmiennej nowej linii . Jej wartość musi być wprowadzona po echo linia jest rozszerzony tak używam setlocal enableDelayedExpansion włączyć znaki wykrzykników, które rozszerzają zmiennych na wykonanie. Oraz substytuty wykonanie \ n z nowej linii treści (poszukaj składni przy pomocy zestawu ). Oczywiście moglibyśmy użyć ! Newline! podczas ustawiania odpowiedzi, ale \ n jest wygodniejszy. Może być przekazywany z zewnątrz (spróbuj Hello R2 \ nD2 ), gdzie nikt nie zna nazwy zmiennej przechowującej podział linii (Tak, Witaj C3! Nowa linia! P0 działa w ten sam sposób).
Powyższy przykład może zostać zawężony do podprogramu lub samodzielnej partii, używanej jak
call:mlecho Hi\nI'm your comuter
:Pamiętaj, że dodatkowy ukośnik odwrotny nie uniemożliwi parsowania skryptu \ n podciągów.
źródło
Działa to dla mnie, nie jest konieczne opóźnione rozszerzenie:
Zapisuje dane wyjściowe w następujący sposób:
źródło
echo asdf >myfile.txt
da dokładnie takie same wyniki.echo
dołącza nowy wiersz na końcu ciągu.Aby rozpocząć nowy wiersz wsadowo, wystarczy dodać „echo [”, tak:
źródło
echo[.bat
echo.
to też złe rozwiązanie.echo.
. Oczekiwanie, że użytkownicy twojego skryptu będą usuwać pliki ze swojego systemu tylko dlatego, że twój skrypt wymaga nowej linii, nie brzmi dla mnie jak dobry projekt.Rozwiązania Ken i Jeb działają dobrze.
Ale nowe wiersze są generowane tylko ze znakiem LF i potrzebuję znaków CRLF (wersja Windows).
W tym celu na końcu skryptu przekonwertowałem LF na CRLF.
Przykład:
źródło
Możesz użyć
@echo
(@echo + [spacja] + [niestabilna spacja])Uwaga: Nietrwałe miejsce można uzyskać za pomocą Alt + 0160
Mam nadzieję, że to pomoże :)
[edytuj] Hmm, masz rację, potrzebowałem tego w pliku Makefile, działa tam idealnie. Myślę, że moja odpowiedź nie jest dostosowana do plików wsadowych ... Moje złe.
źródło
ECHO ist eingeschaltet (ON).
pustej linii, spróbowałem po poleceniu cmdTo rozwiązanie działa (przetestowane):
Konwertuje to pojedyncze linie linii na kombinację linii powrotu karetki.
źródło
echo hello \n world
Nie mogę tego uczynić prostszym niż:
źródło