Apa yang setara dengan batch Windows dari perintah shell Linux echo -n
yang menekan baris baru di akhir output?
Idenya adalah menulis pada baris yang sama di dalam satu lingkaran.
windows
batch-file
cmd
newline
gregseth
sumber
sumber
echo
bisa mengambil-n
tetapicmd.exe
itu tidak akan berhasil ^^echo
bisa mengambil-n
" dalam konteks pertanyaan yang berkaitan dengan Windows, tidak benar.Jawaban:
Menggunakan
set
dan/p
parameter yang dapat Anda gema tanpa baris baru:Sumber
sumber
<nul set /p =Hello
.set /p
tidak dapat menggema tanda sama dengan karakter pertama atau spasi / tab.< nul
adalah pengalihan dariNUL
perangkat. Ini tidak mengandung apa pun, tapi itu sudah cukup untukset /p
berhenti menunggu input penggunaMenggunakan:
echo | set /p=
atau<NUL set /p=
keduanya akan bekerja untuk menekan baris baru.Namun, ini bisa sangat berbahaya ketika menulis skrip yang lebih canggih ketika memeriksa ERRORLEVEL menjadi penting karena pengaturan
set /p=
tanpa menentukan nama variabel akan menetapkan ERRORLEVEL ke 1.Pendekatan yang lebih baik adalah dengan hanya menggunakan nama variabel dummy seperti:
echo | set /p dummyName=Hello World
Ini akan menghasilkan apa yang Anda inginkan tanpa ada hal-hal licik yang terjadi di latar belakang karena saya harus mencari cara yang sulit, tetapi ini hanya bekerja dengan versi pipa;
<NUL set /p dummyName=Hello
akan tetap menaikkan ERRORLEVEL ke 1.sumber
Metode SET / P yang sederhana memiliki batasan yang sedikit berbeda di antara versi Windows.
Kutipan terkemuka dapat dilucuti
Ruang putih terkemuka dapat dilucuti
Memimpin
=
menyebabkan kesalahan sintaksis.Lihat http://www.dostips.com/forum/viewtopic.php?f=3&t=4209 untuk informasi lebih lanjut.
jeb memposting solusi pintar yang memecahkan sebagian besar masalah pada teks Output tanpa linefeed, bahkan dengan spasi terdepan atau = Saya telah menyempurnakan metode ini sehingga dapat dengan aman mencetak benar-benar semua string batch yang valid tanpa baris baru, pada versi Windows apa pun dari XP dan seterusnya. Perhatikan bahwa
:writeInitialize
metode ini berisi string literal yang mungkin tidak dikirim dengan baik ke situs. Sebuah komentar disertakan yang menggambarkan urutan karakter apa yang seharusnya.Metode
:write
dan:writeVar
dioptimalkan sedemikian sehingga hanya string yang berisi karakter utama yang merepotkan ditulis menggunakan versi saya yang dimodifikasi dari metode COPY jeb. String yang tidak bermasalah ditulis menggunakan metode SET / P yang lebih sederhana dan lebih cepat.sumber
ECHO.
, kecualiECHO.
bisa gagal dalam keadaan yang tidak jelas . Ada banyak bentuk lain yang juga bisa gagal dalam situasi yang tidak jelas. Satu-satunya yang selalu berhasil adalahECHO(
.Sebagai tambahan untuk jawaban @ xmechanix, saya perhatikan melalui penulisan konten ke file:
Bahwa ini akan menambah ruang tambahan di akhir string yang dicetak , yang dapat merepotkan, khususnya karena kami berusaha menghindari menambahkan baris baru (karakter spasi putih lain) ke akhir string.
Untungnya, mengutip string yang akan dicetak, yaitu menggunakan:
Akan mencetak string tanpa baris baru atau karakter spasi di akhir.
sumber
World
dan>
...set /p="abc"<nul|xxd -p
menampilkan616263
sedangkanset /p=abc<nul|xxd -p
memberi61626320
Solusi untuk ruang putih yang dilucuti dalam SET / P:
Kuncinya adalah karakter backspace yang dapat Anda panggil dalam editor teks EDIT untuk DOS. Untuk membuatnya di EDIT, tekan ctrlP + ctrlH . Saya akan menempelkannya di sini tetapi halaman web ini tidak dapat menampilkannya. Ini terlihat pada Notepad (tidak valid, seperti persegi panjang hitam kecil dengan lingkaran putih di tengah)
Jadi, Anda menulis ini:
Titik bisa berupa karakter apa saja, hanya ada di sana untuk memberi tahu SET / P bahwa teks dimulai di sana, sebelum spasi, dan bukan di " Halo ". " 9 " adalah representasi dari karakter backspace yang tidak dapat saya tampilkan di sini. Anda harus meletakkannya bukan angka 9, dan itu akan menghapus " . ", Setelah itu Anda akan mendapatkan ini:
dari pada:
Saya harap ini membantu
sumber
Anda dapat menghapus baris baru menggunakan "tr" dari GnuWin32 ( coreutils paket)
By the way, jika Anda melakukan banyak scripting, gnuwin32 adalah tambang emas.
sumber
trim
?\r
,\n
atau\r\n
(garis baru di OSX, POSIX dan Windows masing-masing) tidak "ruang" karakter.Berikut adalah metode lain, menggunakan Powershell Write-Host yang memiliki parameter -NoNewLine, menggabungkannya dengan
start /b
dan menawarkan fungsionalitas yang sama dari batch.NoNewLines.cmd
Keluaran
Yang di bawah ini sedikit berbeda, tidak bekerja persis seperti yang diinginkan OP, tetapi menarik karena setiap hasil menimpa hasil sebelumnya meniru penghitung.
sumber
dan juga untuk memulai dengan menggunakan spasi
sumber
Mungkin ini yang Anda cari, ini skrip sekolah lama ...: P
atau mungkin Anda mencoba mengganti baris saat ini daripada menulis ke baris baru? Anda dapat bereksperimen dengan ini dengan menghapus "% bs%" setelah "." tandatangani dan juga dengan menghapus "% bs%" lainnya setelah "Contoh pesan".
Saya menemukan ini sangat menarik karena menggunakan variabel untuk tujuan selain apa yang seharusnya dilakukan. seperti yang Anda lihat "% bs%" mewakili backspace. "% Bs%" kedua menggunakan backspace untuk menambahkan spasi setelah "Contoh pesan" untuk memisahkan "Pause output's output" tanpa benar-benar menambahkan karakter yang terlihat setelah "Contoh pesan". Namun, ini juga dimungkinkan dengan tanda persentase reguler.
sumber
set nl=^& echo.
trik ini di mana-mana dan nama variabelnya menyesatkan. % nl% bukan karakter baris baru : itu meluas&echo.
jadi pada akhirnya Anda menjalankanecho
perintah baru setiap kali, karenanya baris baru. Anda dapat memeriksanya secara tertulisecho "%nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%"
. Anda dapatkan"& echo. The& echo. new& echo. line& echo. is& echo. not& echo. apparent& echo. throughout& echo. text& echo. "
, mengungkapkan triknya. Outputnya sama tetapi tidak untuk alasan yang Anda sarankan.cw.exe
Utilitas DIY (konsol tulis)Jika Anda tidak menemukannya di luar kotak, di luar rak, Anda dapat menggunakan DIY. Dengan
cw
utilitas ini Anda dapat menggunakan setiap jenis karakter. Setidaknya, saya ingin berpikir begitu. Silakan stress-test dan beri tahu saya.Alat
Yang Anda butuhkan adalah .NET diinstal, yang sangat umum saat ini.
Material
Beberapa karakter diketik / disalin-tempel.
Langkah
.bat
file dengan konten berikut.Menjalankannya.
Sekarang Anda memiliki utilitas 4KB yang bagus sehingga Anda dapat menghapus
.bat
.Atau, Anda dapat menyisipkan kode ini sebagai subroutine dalam batch, kirim yang dihasilkan
.exe
untuk%temp%
, menggunakannya dalam batch Anda dan menghapusnya saat Anda sudah selesai.Cara Penggunaan
Jika Anda ingin menulis sesuatu tanpa baris baru:
cw Whatever you want, even with "", but remember to escape ^|, ^^, ^&, etc. unless double-quoted, like in "| ^ &".
Jika Anda ingin carriage return (pergi ke awal baris), jalankan saja
cw
Jadi coba ini dari baris perintah:
sumber
Saya membuat fungsi dari ide @arnep:
ini dia:
Gunakan dengan
call :SL "Hello There"
saya tahu ini tidak istimewa tapi butuh waktu lama untuk memikirkannya saya pikir saya akan mempostingnya di sini.
sumber
Contoh 1: Ini berfungsi dan menghasilkan kode Keluar = 0. Itu Bagus. Perhatikan "." , langsung setelah gema.
Ini adalah pesan yang ditampilkan seperti Linux echo -n akan menampilkannya ... 0
Contoh 2: Ini berfungsi tetapi menghasilkan kode Keluar = 1. Itu buruk. Harap perhatikan kurangnya ".", Setelah gema. Tampaknya itulah perbedaannya.
Ini adalah pesan yang ditampilkan seperti Linux echo -n akan menampilkannya ... 1
sumber
Terinspirasi oleh jawaban untuk pertanyaan ini, saya membuat skrip counter batch sederhana yang terus mencetak nilai kemajuan (0-100%) pada baris yang sama (menimpa yang sebelumnya). Mungkin ini juga akan bermanfaat bagi orang lain yang mencari solusi serupa.
Catatan : Ini
*
adalah karakter yang tidak dapat dicetak, ini harus dimasukkan menggunakan kombinasi tombol [Alt
+Numpad 0
+Numpad 8
], yang merupakanbackspace
karakter.sumber
Saya percaya tidak ada pilihan seperti itu. Atau Anda dapat mencoba ini
sumber
Anda dapat menekan baris baru dengan menggunakan perintah set / p. Perintah set / p tidak mengenali spasi, untuk itu Anda bisa menggunakan karakter titik dan backspace untuk membuatnya mengenalinya. Anda juga dapat menggunakan variabel sebagai memori dan menyimpan apa yang ingin Anda cetak di dalamnya, sehingga Anda dapat mencetak variabel alih-alih kalimat. Sebagai contoh:
Dengan cara ini Anda dapat mencetak apa pun tanpa garis baru. Saya telah membuat program untuk mencetak karakter satu per satu, tetapi Anda dapat menggunakan kata-kata juga sebagai ganti karakter dengan mengubah loop.
Dalam contoh di atas saya menggunakan "enabledelayedexpansion" sehingga perintah set / p tidak mengenali "!" karakter dan mencetak titik, bukan itu. Saya harap Anda tidak menggunakan tanda seru "!" ;)
sumber
Terlambat menjawab di sini, tetapi bagi siapa pun yang perlu menulis karakter khusus ke satu baris yang menemukan jawaban dbenham terlalu panjang sekitar 80 baris dan yang skripnya mungkin rusak (mungkin karena input pengguna) di bawah batasan hanya menggunakan
set /p
, itu mungkin termudah untuk hanya untuk memasangkan Kelelawar atau Cmd dengan C ++ dikompilasi atau executable C-bahasa dan kemudian hanyacout
atauprintf
karakter. Ini juga akan memungkinkan Anda untuk dengan mudah menulis beberapa kali ke satu baris jika Anda menunjukkan semacam bilah kemajuan atau sesuatu yang menggunakan karakter, seperti yang tampak pada OP.sumber
printf
ing daricmd
panel Win-7 memberi saya"'printf' is not recognized as an internal or external command, operable program or batch file."
printf
bukan asli windows. Ini pertanyaan windows.