Dalam pertanyaan Anda, Anda menyebutkan:
"... itu akan menempatkan output dalam file tetapi tidak benar-benar menjalankannya. Dalam kasus saya, saya akan membutuhkannya dieksekusi dan kemudian login ke file untuk referensi nanti."
Karena Anda mengatakan program sedang berjalan dan hasilnya dimasukkan ke dalam file, saya pikir Anda mungkin berarti "ditampilkan" , bukan "dieksekusi" .
Jika itu bukan yang Anda maksudkan, maka mungkin akan membantu jika itu dijelaskan lebih baik, mungkin dengan beberapa sampel output.
Bagaimanapun, saya memposting jawaban ini jika ada orang lain yang menemukan pertanyaan / jawaban ini bermanfaat.
Jadi, pada dasarnya, sepertinya Anda ingin output skrip ditangkap ke file, dan juga dapat melihat output skrip di layar saat skrip sedang berjalan.
(tl; versi dr: gunakan musim dingin , seperti ini:
script 2>&1 | wtee logfile.txt
)
Untuk posting ini, saya akan menggunakan file batch uji kecil, tetapi skrip Anda bisa sebesar dan rumit atau sesederhana yang Anda butuhkan:
C:\>type a.cmd
@echo off
echo Command: "dir /b a*"
dir /b a*
echo.
echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.
Inilah yang terjadi ketika saya menjalankan skrip kumpulan ini:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Perhatikan bahwa dalam skrip pengujian, eksekusi pertama dari perintah "dir" berhasil, dan yang kedua gagal. Saya melakukan ini hanya untuk menunjukkan apa yang akan terjadi dengan "pesan kesalahan" ketika Anda menjalankan skrip Anda.
Jika saya menjalankan skrip dan menggunakan pengalihan ( ">" ) untuk menangkap output, saya akan melihat ini
C:\>a.cmd > log.txt
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
C:\>
Perhatikan pesan kesalahan "File Tidak Ditemukan" ditampilkan di layar ketika skrip dijalankan, dan tidak benar-benar ditangkap ke dalam file. Itu karena ">" menangkap "output normal" yang telah dikirim ke aliran STDOUT. "Pesan kesalahan" biasanya dikirim ke aliran STDERR.
Untuk menangkap "output normal" dan "pesan kesalahan", Anda juga perlu menangkap aliran STDERR, yang ditunjukkan oleh "2" di "2> & 1" pada perintah di sini:
C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Di unix, ada perintah standar: "tee"
Menggunakan perintah "tee", Anda dapat menangkap output dari suatu program, dan juga menampilkan output ke layar, pada saat yang sama.
Perintah "tee" tidak standar dengan windows, tetapi Anda dapat mengunduh versi "tee" gratis untuk windows di sini:
wintee . Program ini diunduh bernama: "wtee.exe"
.
Anda menggunakan program "wtee.exe" seperti yang ditunjukkan di bawah ini.
Ini akan menangkap output skrip ke file bernama "log.txt"
seperti sebelumnya, dan itu juga akan menampilkan output ke layar saat skrip sedang berjalan:
C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found