Menggunakan Windows Server 2008, bagaimana cara menangkap output dari skrip yang sedang dijalankan dengan penjadwal tugas windows?
Saya menguji skrip batch pencetakan kustom yang agak panjang, dan untuk tujuan debugging, saya ingin melihat semua output darinya setiap malam.
batch-file
scheduled-tasks
Mechaflash
sumber
sumber
Jawaban:
Coba ini sebagai string perintah di Penjadwal Tugas:
sumber
cmd /c "path with spaces/command.cmd > file.txt"
jika Anda memiliki spasi. Jawaban2>&1
dari Ivan juga masuk ke dalam tanda kutip.cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
Dengan stderr (tempat sebagian besar kesalahan terjadi):
sumber
Untuk melengkapi jawaban @ user2744787, berikut adalah tangkapan layar untuk menunjukkan cara menggunakan
cmd
dengan argumen dalam Tugas Terjadwal:Program / skrip:
cmd
Tambahkan argumen:
/c run_with_default_port.bat > IMQuantWebServices.log
sumber
Ini
>>
akan menambahkan file log, daripada menimpanya setiap kali. Ini2>&1
juga akan mengirimkan kesalahan ke file log Anda.sumber
Anda dapat memiliki debug.cmd yang memanggil yourscript.cmd
Anda menjadwalkan debug.cmd alih-alih skripAnda.cmd
sumber
Gunakan
cmd.exe
prosesor perintah untuk membuat nama file dengan stempel waktu untuk mencatat keluaran tugas terjadwal AndaUntuk membangun jawaban oleh orang lain di sini, mungkin Anda ingin membuat file keluaran yang memiliki tanggal dan / atau waktu yang disematkan dalam nama file. Anda dapat menggunakan
cmd.exe
prosesor perintah untuk melakukan ini untuk Anda.Catatan: Teknik ini mengambil output string dari variabel lingkungan Windows internal dan memotongnya berdasarkan posisi karakter. Karenanya, nilai pasti yang diberikan dalam contoh di bawah ini mungkin tidak benar untuk wilayah Windows yang Anda gunakan. Selain itu, dengan beberapa pengaturan regional, beberapa komponen tanggal atau waktu dapat memasukkan spasi ke dalam nama file yang dibangun ketika nilainya kurang dari 10. Untuk mengurangi masalah ini, apit nama file Anda dengan tanda kutip sehingga ada spasi yang tidak diinginkan dalam file name tidak akan merusak baris perintah yang Anda buat. Bereksperimen dan temukan apa yang terbaik untuk situasi Anda.
Sadarilah bahwa
PowerShell
lebih kuat daricmd.exe
. Salah satu cara yang lebih kuat adalah dapat menangani wilayah Windows yang berbeda. Tapi jawaban ini tentang menyelesaikan masalah ini menggunakancmd.exe
, bukanPowerShell
, jadi kami melanjutkan.Menggunakan
cmd.exe
Anda dapat mengakses berbagai komponen tanggal dan waktu dengan membagi variabel lingkungan internal
%date%
dan%time%
, sebagai berikut (sekali lagi, nilai pembagian yang tepat bergantung pada wilayah yang dikonfigurasi di Windows):%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
Misalkan Anda ingin file log Anda diberi nama menggunakan format tanggal / waktu ini: "
Log_[yyyyMMdd]_[hhmmss].txt
". Anda akan menggunakan yang berikut ini:Untuk mengujinya, jalankan baris perintah berikut:
Menyatukan semuanya, untuk mengarahkan keduanya
stdout
danstderr
dari skrip Anda ke file log yang diberi nama dengan tanggal dan waktu saat ini, gunakan mungkin menggunakan yang berikut sebagai baris perintah Anda:Perhatikan penggunaan tanda kutip di sekitar nama file untuk menangani contoh komponen tanggal atau waktu mungkin memperkenalkan karakter spasi.
Dalam kasus saya, jika tanggal / waktu saat ini adalah 10/05/2017 9:05:34 AM, baris perintah di atas akan menghasilkan yang berikut:
sumber
Anda dapat menulis ke file log pada baris yang ingin Anda hasilkan seperti ini:
Dengan cara ini Anda dapat memilih perintah mana yang akan dikeluarkan jika Anda tidak ingin menelusuri semuanya, cukup dapatkan apa yang perlu Anda lihat. The
>
kemauan output ke file yang ditentukan (membuat file jika tidak ada dan Timpa jika tidak). The>>
akan menambah ke file yang ditentukan (membuat file jika tidak ada tetapi menambahkan ke isi jika tidak).sumber
Contoh bagaimana menjalankan program dan menulis stdout dan stderr ke file dengan timestamp:
Bagian kuncinya adalah menggandakan seluruh bagian di belakang
cmd /c
dan di dalamnya gunakan tanda kutip ganda seperti biasa. Perhatikan juga bahwa tanggal bergantung pada lokal, contoh ini bekerja menggunakan lokal AS.sumber
Cuplikan ini menggunakan wmic.exe untuk membuat string tanggal. Itu tidak rusak oleh pengaturan lokal
sumber