Bagaimana Anda bisa memasukkan baris baru dari output file batch Anda?
Saya ingin melakukan sesuatu seperti:
echo hello\nworld
Yang akan menghasilkan:
hello
world
windows
batch-file
newline
Brian R. Bondy
sumber
sumber
echo Yes&echo No
Jawaban:
echo hello & echo.world
Ini berarti Anda dapat mendefinisikan
& echo.
sebagai konstanta untuk baris baru\n
.sumber
echo. && echo hello && echo. && echo world
$ (echo Hello && echo World) > ./File.txt
echo(
untuk meningkatkan kinerja (masih tanpa ruang pikiran Anda). Diskusi diperpanjang karakter lain dan kelebihan / kekurangan mereka di ECHO. GAGAL untuk memberikan teks atau baris kosong - Alih-alih menggunakan ECHO /Menggunakan:
sumber
echo "Makefile contents (which has \n)" > Makefile
Dengan beberapa gema, itu tidak akan berhasil(echo hello & echo world) >> ./test.txt
echo line 1 > Makefile
dan kemudianecho line 2 >> Makefile
. Penggunaan>>
penyebab output ditambahkan ke file, yang merupakan perilaku yang Anda butuhkan untuk kasus ini.Ini dia, buat file .bat dengan yang berikut di dalamnya:
Anda akan melihat output seperti berikut:
Anda hanya perlu kode antara pernyataan REM, jelas.
sumber
set nl=^&echo.
, maka hanyaecho hello %nl% world
menghasilkan efek yang sama.Ada fitur standar
echo:
dalam file cmd / bat untuk menulis baris kosong, yang mengemulasi baris baru di cmd-output Anda:Output dari cmd file yang dikutip di atas:
sumber
echo(
. Sepertinya itu bisa menyebabkan masalah, tetapi sebenarnya berfungsi dengan baik. Semua bentuk lain memiliki setidaknya satu situasi di mana perintah tidak akan melakukan yang diinginkan.ECHO(
gagal.echo
, dan apa pengaruhnya?"Seperti jawaban Ken, tetapi dengan penggunaan ekspansi yang tertunda.
Pertama-tama satu karakter linefeed dibuat dan ditugaskan ke variabel \ n.
Ini berfungsi sebagai tanda sisipan di garis akhir mencoba untuk melarikan diri dari karakter berikutnya, tetapi jika ini adalah Linefeed itu diabaikan dan karakter berikutnya dibaca dan melarikan diri (bahkan jika ini juga merupakan linefeed).
Maka Anda membutuhkan umpan baris ketiga untuk mengakhiri instruksi saat ini, jika tidak baris ketiga akan ditambahkan ke variabel LF.
Bahkan file batch memiliki akhiran baris dengan CR / LF hanya LF yang penting, karena CR dihapus pada fase parser ini.
Keuntungan menggunakan ekspansi yang tertunda adalah, tidak ada penanganan karakter khusus sama sekali.
echo Line1%LF%Line2
akan gagal, karena parser berhenti mengurai pada satu baris feed.Penjelasan lebih lanjut ada di
SO: Perintah panjang dipecah menjadi beberapa baris dalam file Vista / DOS batch (.bat)
SO: Bagaimana cara parse scripts Windows Command Interpreter (CMD.EXE)?
Sunting: Hindari
echo.
Ini tidak menjawab pertanyaan, karena pertanyaannya adalah tentang tunggal
echo
yang dapat menghasilkan beberapa baris.Tetapi terlepas dari jawaban lain yang menyarankan penggunaan
echo.
untuk membuat baris baru, harus dicatat bahwa ituecho.
adalah yang terburuk, karena sangat lambat dan dapat gagal total, ketika cmd.exe mencari file bernamaECHO
dan mencoba memulainya.Untuk mencetak hanya baris kosong, Anda bisa menggunakan salah satunya
Tetapi penggunaan
echo.
,echo\
atauecho:
harus dihindari, karena bisa sangat lambat, tergantung lokasi di mana skrip akan dieksekusi, seperti drive jaringan.sumber
call :pause line1!\n!line2
, mulailah subrutin dengansetlocal EnableDelayedExpansion
dan akhiri dengansetlocal DisableDelayedExpansion
agar baris baru tidak ditafsirkan secara prematur.echo,
echo;
echo(
echo/
echo+
echo=
dan galeri penyamunecho.
echo\
echo:
. Sekarang jika Anda harus menjelaskan mengapa di tempat suci ini bekerja, saya akan berutang bir gratis.echo.
Cukup kata.Jika Anda membutuhkannya dalam satu baris, gunakan
&
. Sebagai contoh,akan menampilkan sebagai:
Sekarang, katakan Anda ingin sesuatu yang sedikit lebih mewah, ...
Keluaran
Kemudian cukup masukkan
%n%
setiap kali Anda ingin baris baru dalam pernyataan gema. Ini lebih dekat dengan Anda\n
digunakan dalam berbagai bahasa.Kerusakan
set n=
set variabeln
sama dengan:^
Nulls keluar simbol berikutnya untuk mengikuti:&
Berarti melakukan perintah lain pada baris yang sama. Kami tidak peduli tentang tingkat kesalahan (ini merupakan pernyataan gema untuk menangis dengan suara keras), jadi tidak&&
diperlukan.echo.
Melanjutkan pernyataan gema.Semua ini berfungsi karena Anda benar-benar dapat membuat variabel yang merupakan kode, dan menggunakannya di dalam perintah lain. Ini semacam fungsi ghetto, karena batch bukan merupakan bahasa skrip shell yang paling canggih. Ini hanya berfungsi karena batch penggunaan variabel yang buruk, tidak menunjuk antara int, karakter, float, string, dll secara alami.
Jika Anda licik, Anda bisa membuatnya bekerja dengan hal-hal lain. Misalnya, menggunakannya untuk menggemakan tab
sumber
echo.
saat pertama kali mencoba menemukan file dengan nama itu. Gunakan tanda baca lain, sepertiecho,
Saat menggemakan sesuatu untuk mengarahkan ulang ke file, beberapa perintah gema tidak akan berfungsi. Saya pikir mungkin pengalih arah ">>" adalah pilihan yang baik:
sumber
(echo hello && echo world) > temp
disebutkan oleh Nathan J. Brauer dalam komentar atas karya jawaban yang diterima saat ini.Seperti yang Grimtron sarankan - berikut ini adalah contoh cepat untuk mendefinisikannya:
Keluaran
sumber
echo hello %newline%world
garis tidak ada spasi di antara keduanya.echo "Hello %newline% world"
gagal karena ada di dalam tanda kutip. Karena itu bukan nyata baris baru.Jika Anda perlu meletakkan hasil ke file, Anda dapat menggunakan
sumber
Anda juga bisa melakukan ini,
Outputnya adalah,
Perhatikan bahwa ketika ini dimasukkan ke dalam file batch, '%' akan digandakan.
sumber
*
charJika ada yang datang ke sini karena mereka ingin menggaungkan baris kosong dari makefile MINGW, saya menggunakan
@cmd /c echo.
hanya menggunakan
echo.
menyebabkanprocess_begin: CreateProcess(NULL, echo., ...) failed.
pesan kesalahan yang ditakuti .Saya harap ini membantu setidaknya satu orang di luar sana :)
sumber
Jika seseorang perlu menggunakan \ n yang terkenal dalam string literal yang dapat diteruskan ke variabel, dapat menulis kode seperti dalam skrip Hello.bat di bawah ini:
Dengan cara ini, output multiline dapat disiapkan di satu tempat, bahkan di file scritpt atau eksternal lainnya, dan dicetak di tempat lain.
Jeda baris diadakan dalam variabel baris baru . Nilainya harus diganti setelah para gema garis diperluas jadi saya menggunakan enableDelayedExpansion setlocal untuk memungkinkan tanda-tanda seru yang memperluas variabel pada eksekusi. Dan pengganti eksekusi \ n dengan konten baris baru (cari sintaks pada set bantuan ). Tentu saja kita dapat menggunakan ! Baris baru! saat mengatur jawaban tetapi \ n lebih mudah. Ini dapat diteruskan dari luar (coba Hello R2 \ nD2 ), di mana tidak ada yang tahu nama variabel yang menahan baris (Ya, Hello C3! Baris baru! P0 bekerja dengan cara yang sama).
Contoh di atas dapat disempurnakan menjadi subrutin atau batch mandiri, digunakan seperti
call:mlecho Hi\nI'm your comuter
:Harap dicatat, bahwa backslash tambahan tidak akan mencegah skrip mem-parsing \ n substring.
sumber
Ini bekerja untuk saya, tidak perlu ekspansi yang tertunda:
Itu menulis output seperti ini:
sumber
echo asdf >myfile.txt
akan menghasilkan hasil yang sama persis.echo
menambahkan baris baru ke akhir string.Untuk memulai baris baru dalam batch, yang harus Anda lakukan adalah menambahkan "echo [", seperti:
sumber
echo[.bat
echo.
juga merupakan solusi yang buruk.echo.
. Mengharapkan pengguna skrip Anda untuk menghapus file di sistem mereka hanya karena skrip Anda memerlukan baris baru tidak terdengar seperti desain yang bagus untuk saya.Solusi Ken dan Jeb bekerja dengan baik.
Tetapi baris baru dihasilkan dengan hanya karakter LF dan saya perlu karakter CRLF (versi Windows).
Untuk ini, di akhir skrip, saya telah mengkonversi LF ke CRLF.
Contoh:
sumber
Anda dapat menggunakan
@echo
(@echo + [spasi] + [ruang tidak aman])Catatan: Ruang insecable dapat diperoleh dengan Alt + 0160
Semoga bermanfaat :)
[Sunting] Hmm Anda benar, saya membutuhkannya di Makefile, itu berfungsi dengan baik di sana. Saya kira jawaban saya tidak disesuaikan untuk file batch ... Buruk saya.
sumber
ECHO ist eingeschaltet (ON).
tidak mendapat baris kosong, mencoba di cmd-promptSolusi ini berfungsi (Diuji):
Ini mengonversi umpan baris yang terisolasi ke kombinasi umpan saluran balik carriage.
sumber
echo hello \n world
Saya tidak bisa membuatnya lebih sederhana dari:
sumber