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
Gunakan:
echo hello
echo.
echo world
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.
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.
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
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 :)
Ini bekerja untuk saya, tidak ada yang tertunda ekspansi yang diperlukan:
@echo off
(
echo ^<html^>
echo ^<body^>
echo Hello
echo ^</body^>
echo ^</html^>
)
pause
Menulis output seperti ini:
<html>
<body>
Hello
</body>
</html>
Press any key to continue . . .
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
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.
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.