Bagaimana saya bisa gema sebuah baris baru dalam file batch?

Bagaimana anda bisa anda menyisipkan sebuah baris baru dari batch file output?

Aku ingin melakukan sesuatu seperti:

echo hello\nworld

Yang akan output:

hello
world
Mengomentari pertanyaan (5)

Gunakan:

echo hello
echo.
echo world
Komentar (8)
Larutan

echo halo & echo.dunia

Ini berarti anda bisa menentukan & echo. sebagai konstan untuk newline \n.

Komentar (17)

Di sini anda pergi, membuat .bat file dengan kode berikut di dalamnya :

@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

Anda akan melihat output seperti berikut:

There should be a newline
inserted here.

Press any key to continue . . .

Anda hanya perlu kode antara REM pernyataan, jelas.

Komentar (10)

Ada fitur standar echo: di cmd/bat file untuk menulis baris kosong, yang mengemulasi baris baru di cmd-output:

@echo off
@echo line1
@echo:
@echo line2

Output yang dikutip di atas cmd-file:

line1

line2
Komentar (11)

Seperti jawaban dari Ken, tapi dengan menggunakan perluasan tertunda.

setlocal EnableDelayedExpansion
(set \n=^
%=Do not remove this line=%
)

echo Line1!\n!Line2
echo Works also with quotes "!\n!line2"

Pertama tunggal linefeed karakter yang diciptakan dan ditugaskan untuk \n-variabel. Ini bekerja sebagai sisipan di garis akhir mencoba untuk melarikan diri karakter berikutnya, tetapi jika ini adalah Linefeed hal ini diabaikan dan karakter berikutnya adalah membaca dan melarikan diri (bahkan jika ini juga linefeed). Maka anda perlu ketiga linefeed untuk mengakhiri instruksi saat ini, lain baris ketiga akan ditambahkan ke LF-variabel. Bahkan batch file yang memiliki akhiran dengan CR/LF hanya LF yang penting, seperti CR's dihapus pada fase ini dari parser.

Keuntungan menggunakan tertunda ekspansi adalah, bahwa tidak ada karakter khusus penanganan sama sekali. echo Line1%LF%Line2 akan gagal, karena parsing parser berhenti di satu linefeeds.

Penjelasan lebih lanjut ada di JADI:perintah yang Panjang dibagi atas beberapa baris di Vista/DOS batch (.bat) file JADI:Bagaimana Windows Command Interpreter (CMD.EXE) parse script?

Edit: Menghindari echo.

Ini doesn't menjawab pertanyaan, seperti pertanyaan tentang single echo yang dapat menampilkan beberapa baris.

Tapi meskipun jawaban lain yang menunjukkan penggunaan echo. untuk membuat baris baru, perlu dicatat bahwa echo. adalah yang terburuk, karena itu's sangat lambat dan itu dapat benar-benar gagal, karena cmd.exe mencari sebuah file bernama ECHO dan mencoba untuk memulai itu.

Untuk mencetak hanya sebuah baris kosong, anda bisa menggunakan salah satu dari

echo,
echo;
echo(
echo/
echo+
echo=

Tetapi penggunaan echo., echo\ atau echo: harus dihindari, karena mereka dapat benar-benar lambat, tergantung dari lokasi dimana script akan dieksekusi, seperti drive jaringan.

Komentar (2)

echo. Cukup kata.

Jika anda membutuhkannya dalam satu baris, gunakan &. Misalnya,

echo Line 1 & echo. & echo line 3

akan output seperti:

Line 1

line 3

Sekarang, katakanlah anda ingin sesuatu yang sedikit lebih menarik, ...

set n=^&echo.
echo hello %n% world

Output

hello
world

Kemudian hanya melempar %n% kapanpun anda inginkan baris baru di gema pernyataan. Ini lebih dekat dengan anda \n yang digunakan dalam berbagai bahasa.

Kerusakan

set n= set variabel n sama dengan:

^ Nulls keluar berikutnya simbol untuk mengikuti:

& Berarti melakukan perintah lain pada baris yang sama. Kami don't peduli tentang errorlevel(its gema pernyataan untuk menangis dengan suara keras), sehingga tidak ada && yang dibutuhkan.

echo. Terus menggemakan pernyataan.

Semua ini bekerja karena anda benar-benar dapat membuat variabel itu adalah kode, dan menggunakan mereka dalam perintah lain. Itu adalah semacam ghetto fungsi, karena batch yang tidak tepat yang paling canggih dari shell scripting bahasa. Ini hanya bekerja karena batch's buruk penggunaan variabel, tidak menunjuk antara int, karakter, float, string, dll secara alami.

Jika anda cerdik, anda bisa mendapatkan ini untuk bekerja dengan hal-hal lain. Misalnya, menggunakannya untuk echo tab

set t=^&echo.     ::there are spaces up to the double colon
Komentar (1)

Ketika menggemakan sesuatu untuk mengarahkan ke file, beberapa perintah echo tidak akan bekerja. Saya pikir mungkin ">>" redirector adalah pilihan yang baik:

echo halo > temp
echo dunia >> temp
Komentar (2)

Seperti Grimtron menunjukkan - berikut adalah contoh cepat untuk mendefinisikannya:

@echo off
set newline=^& echo.
echo hello %newline%world

Output

C:\>test.bat
hello
world
Komentar (3)

Jika anda perlu untuk menempatkan hasil ke file, anda dapat menggunakan

(echo a & echo. & echo b) > file_containing_multiple_lines.txt
Komentar (0)

Anda juga dapat melakukan seperti ini,

(for %i in (a b "c d") do @echo %~i)

Output akan,

a
b
c d

Perhatikan bahwa saat ini dimasukkan ke dalam sebuah batch file, '%' akan menjadi dua kali lipat.

(for %%i in (a b "c d") do @echo %%~i)
Komentar (2)

Jika ada orang datang ke sini karena mereka adalah tempat yang sempurna untuk echo baris kosong dari MINGW membuat makefile, saya digunakan

@cmd /c echo.

hanya menggunakan echo. penyebab ditakuti process_begin: CreateProcess(NULL, echo., ...) gagal. pesan kesalahan.

Saya harap ini membantu setidaknya satu orang lain di luar sana :)

Komentar (0)

Untuk memulai baris baru dalam batch, semua harus anda lakukan adalah menambahkan "echo[", seperti:

echo Hi!
echo[
echo Hello!
Komentar (5)

Ini bekerja untuk saya, tidak ada yang tertunda ekspansi yang diperlukan:

@echo off
(
echo ^ 
echo ^
echo Hello
echo ^
echo ^
)
pause

Menulis output seperti ini:



Hello


Press any key to continue . . .
Komentar (2)

Ken dan Jeb solusi bekerja dengan baik.

Tapi garis baru yang dihasilkan dengan hanya satu karakter LF dan saya perlu CRLF karakter (versi Windows).

Untuk ini, di akhir naskah, saya telah dikonversi LF untuk CRLF.

Contoh:

TYPE file.txt | FIND "" /V > file_win.txt
del file.txt
rename file_win.txt file.txt
Komentar (0)

Jika salah satu kebutuhan untuk menggunakan terkenal \n pada string literal yang dapat dilalui untuk sebuah variabel, dapat menulis kode seperti di Halo.bat script di bawah ini:

@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!%

Cara ini multiline output dapat disusun dalam satu tempat, bahkan di lain scritpt atau file eksternal, dan dicetak di tempat lain.

Line break diadakan di newline variabel. Nilainya harus diganti setelah the echo garis diperluas jadi saya menggunakan setlocal enableDelayedExpansion untuk mengaktifkan seru tanda-tanda yang memperluas variabel yang di eksekusi. Dan eksekusi pengganti \n dengan newline isi (lihat sintaks di membantu mengatur). Kita bisa saja menggunakan !baris baru! sementara pengaturan jawaban tapi \n lebih nyaman. Mungkin berlalu dari luar (coba Halo R2\nD2), di mana tidak ada yang tahu nama variabel yang memegang garis putus (Ya, Halo C3!newline!P0 bekerja dengan cara yang sama).

Contoh di atas dapat disempurnakan untuk subrutin atau mandiri batch, yang digunakan seperti call:mlecho Hi\nI'm anda comuter:

:mlecho
setlocal enableDelayedExpansion
set text=%*
set nl=^

echo %text:\n=!nl!%
goto:eof

Harap dicatat, bahwa tambahan backslash won't mencegah script dari parsing \n substring.

Komentar (2)

Anda dapat menggunakan @echo ( @echo + [space] + [insecable spasi] )

Catatan: insecable ruang dapat diperoleh dengan Alt+0160

Semoga membantu :)

[edit] Hmm anda're kanan, aku membutuhkannya dalam Makefile, ia bekerja dengan sempurna di sana. Saya kira jawaban saya adalah tidak disesuaikan untuk batch file... Saya buruk.

Komentar (2)

Saya dapat't membuat sederhana dari:

echo echo hello^&echo world^&pause>silly.bat                       
call silly.bat
Komentar (0)

Karakter yang paling konservatif cara untuk mencapai hal ini dalam sistem linux, adalah dengan -e alias - yang menafsirkan lolos karakter yang backslashed.

echo -e "hello\nworld"

Berikut ini adalah lain contoh

Komentar (2)