Cara naif sederhana yang lambat karena membuka dan memposisikan penunjuk file ke End-Of-File beberapa kali.
@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt
Cara yang lebih baik - lebih mudah untuk menulis, dan lebih cepat karena file dibuka dan diposisikan hanya sekali.
@echo off
>output.txt (
command1
command2
...
commandN
)
Cara lain yang baik dan cepat yang hanya membuka dan memposisikan file sekali
@echo off
call :sub >output.txt
exit /b
:sub
command1
command2
...
commandN
Sunting 2020-04-17
Sesekali Anda mungkin ingin berulang kali menulis ke dua file atau lebih. Anda mungkin juga menginginkan pesan yang berbeda di layar. Masih mungkin untuk melakukan ini secara efisien dengan mengarahkan ke tuas yang tidak ditentukan di luar blok atau subrutin yang diberi tanda kurung, lalu menggunakan &
notasi untuk mereferensikan file yang sudah dibuka.
call :sub 9>File1.txt 8>File2.txt
exit /b
:sub
echo Screen message 1
>&9 File 1 message 1
>&8 File 2 message 1
echo Screen message 2
>&9 File 1 message 2
>&8 File 2 message 2
exit /b
Saya memilih untuk menggunakan pegangan 9 dan 8 dalam urutan terbalik karena cara itu lebih cenderung menghindari potensi pengalihan permanen karena cacat desain implementasi pengalihan Microsoft saat melakukan beberapa pengalihan pada perintah yang sama. Ini sangat tidak mungkin, tetapi bahkan pendekatan itu dapat mengekspos bug jika Anda berusaha cukup keras. Jika Anda melakukan pengalihan daripada Anda dijamin akan terhindar dari masalah.
3>File1.txt ( 4>File2.txt call :sub)
exit /b
:sub
etc.
%~f0
selalu memberikan jalur lengkap ke skrip batch, bahkan saat berada di dalam subrutin CALLed :.>output.txt 2>&1
cmd /?
atauhelp cmd
dari baris perintah konsol untuk dokumentasi. Trik dari metode ketiga adalah bahwa pengalihan pada CALL berlaku untuk semua perintah dalam subrutin CALL.jika Anda ingin aliran keluar dan aliran yang salah dialihkan
sumber
>>
akan ditambahkan kea.txt
. Untuk menimpaa.txt
, gunakan>
. stackoverflow.com/q/4458231/1098302Saya tahu ini adalah posting yang lebih lama, tetapi seseorang akan menemukannya di pencarian Google dan sepertinya beberapa pertanyaan yang diajukan OP dalam komentar tidak ditangani secara khusus. Juga, mohon tenanglah karena ini adalah jawaban pertama saya yang diposting di SO. :)
Untuk mengarahkan output ke file menggunakan nama file yang dibuat secara dinamis, pendekatan masuk saya (baca: cepat & kotor) adalah solusi kedua yang ditawarkan oleh @dbenham. Jadi contohnya, ini:
Akan membuat file seperti yang Anda lihat di tangkapan layar ini dari file di direktori target
Itu akan berisi keluaran ini:
Juga perlu diingat bahwa solusi ini bergantung pada lokal, jadi berhati-hatilah bagaimana / kapan Anda menggunakannya.
sumber
atau
harus mengisi tagihan.
Jika Anda ingin
APPEND
output, menggunakan>>
bukan>
.>
akan memulai logfile baru.sumber
sumber
Ada program kecil keren yang dapat Anda gunakan untuk mengarahkan output ke file dan konsol
Tampilkan cuplikan kode
sumber
Tambahkan dua baris ini di dekat bagian atas file batch Anda, semua stdout dan stderr setelahnya akan diarahkan ke log.txt:
sumber
Saya menggunakan perintah di atas dalam file batch saya dan berhasil. Di file log, ini menunjukkan hasil dari perintah saya.
sumber
Ini mungkin gagal dalam kasus karakter "beracun" dalam masukan. Mempertimbangkan masukan seperti iniIsAnIn ^^^^ adalah cara yang baik untuk memahami apa yang sedang terjadi. Tentu ada aturan bahwa string input HARUS berada di dalam tanda kutip ganda tetapi saya merasa bahwa aturan ini adalah aturan yang valid hanya jika arti inputnya adalah lokasi di partisi NTFS (mungkin itu adalah aturan untuk URL I saya tidak yakin). Tetapi tentu saja ini bukan aturan untuk string masukan yang berubah-ubah (ini adalah "praktik yang baik" tetapi Anda tidak dapat menghitungnya).
sumber
Menambahkan baris berikut di bagian bawah file batch Anda akan mengambil semuanya seperti yang ditampilkan di dalam jendela CMD dan mengekspor ke file teks:
Ini pada dasarnya melakukan pilih semua -> salin ke clipboard -> tempel ke file teks .
sumber