ในคำถามของคุณคุณพูดถึง:
"... มันจะใส่เอาท์พุทในไฟล์ แต่ไม่ได้รันจริง ๆ ในกรณีของฉันฉันต้องการมันที่จะถูกเอ็กซีคิ้วท์แล้วจึงบันทึกเป็นไฟล์สำหรับการอ้างอิงในภายหลัง"
ตั้งแต่ที่คุณพูดว่าโปรแกรมทำงานและผลลัพธ์ที่ได้จะถูกใส่ลงไปในแฟ้มผมคิดว่าคุณอาจมีความหมาย"ที่แสดง"แทนการ"ดำเนินการ"
ถ้านั่นไม่ใช่สิ่งที่คุณหมายถึงมันอาจจะช่วยได้ถ้าสิ่งนั้นได้รับการอธิบายที่ดีกว่าอาจมีตัวอย่างบางส่วน
ไม่ว่าในกรณีใดฉันกำลังโพสต์คำตอบนี้ในกรณีที่มีคนอื่นที่พบคำถาม / คำตอบนี้มีประโยชน์
ดังนั้นโดยทั่วไปดูเหมือนว่าคุณต้องการให้เอาต์พุตของสคริปต์ถูกจับไปยังไฟล์และเพื่อให้สามารถดูผลลัพธ์ของสคริปต์บนหน้าจอในขณะที่สคริปต์กำลังทำงานอยู่
(tl; dr version: use winteeเช่นนี้:
script 2>&1 | wtee logfile.txt
)
สำหรับโพสต์นี้ฉันจะใช้ไฟล์ชุดทดสอบขนาดเล็ก แต่สคริปต์ของคุณอาจใหญ่และซับซ้อนหรือง่ายเท่าที่คุณต้องการ:
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.
นี่คือสิ่งที่เกิดขึ้นเมื่อฉันเรียกใช้สคริปต์ชุดงานนี้:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
โปรดสังเกตว่าในสคริปต์ทดสอบการเรียกใช้งานครั้งแรกของคำสั่ง "dir" สำเร็จและชุดที่สองล้มเหลว ฉันทำเช่นนี้เพียงเพื่อแสดงสิ่งที่จะเกิดขึ้นกับ "ข้อความผิดพลาด" เมื่อคุณเรียกใช้สคริปต์ของคุณ
ถ้าฉันเรียกใช้สคริปต์และใช้การเปลี่ยนเส้นทาง ( ">" ) เพื่อจับเอาท์พุทฉันจะเห็นสิ่งนี้
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:\>
สังเกตว่าข้อความแสดงข้อผิดพลาด "ไม่พบไฟล์" ปรากฏขึ้นบนหน้าจอเมื่อสคริปต์ทำงานและไม่ถูกบันทึกลงในไฟล์ นั่นเป็นเพราะ">"จับ "เอาต์พุตปกติ" ซึ่งถูกส่งไปยังสตรีม STDOUT "ข้อความผิดพลาด" จะถูกส่งไปยังสตรีม STDERR
ในการจับภาพ "เอาท์พุทปกติ" และ "ข้อความผิดพลาด" คุณต้องจับสตรีม STDERR ซึ่งระบุด้วย"2"ใน"2> & 1"ในคำสั่งที่นี่:
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
ในยูนิกซ์มีคำสั่งมาตรฐาน: "tee"
ใช้คำสั่ง "tee" คุณสามารถจับภาพเอาต์พุตจากโปรแกรมและแสดงผลลัพธ์ไปยังหน้าจอในเวลาเดียวกัน
คำสั่ง "ที" ไม่ได้มาตรฐานที่มีหน้าต่าง แต่คุณสามารถดาวน์โหลดรุ่นฟรีของ "ที" สำหรับ Windows ที่นี่:
wintee "wtee.exe"
โปรแกรมดาวน์โหลดเป็นชื่อ:
คุณใช้โปรแกรม "wtee.exe" ดังที่แสดงด้านล่าง
สิ่งนี้จะดักจับเอาต์พุตสคริปต์ไปยังไฟล์ที่มีชื่อ"log.txt"
เหมือนก่อนหน้านี้และจะแสดงเอาต์พุตไปยังหน้าจอในขณะที่สคริปต์กำลังทำงาน:
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