หนึ่งในวิธีที่มีประโยชน์ที่สุดในการบันทึกและแก้ไขปัญหาพฤติกรรมของคำสั่งหรือ Batch jobs ที่คุณรันบน Windows คือ การเปลี่ยนเส้นทาง Output ไปยังไฟล์
อย่างไรก็ตาม มีหลายวิธีในการ Redirect การเขียน Command line ไปยังไฟล์ ตัวเลือกที่คุณเลือกขึ้นอยู่กับว่าคุณต้องการดู Output คำสั่งอย่างไร
Windows Command Prompt Output ทำงานอย่างไร
เมื่อคุณพิมพ์คำสั่งในคอนโซล Windows (Command Prompt) Output จากคำสั่งนั้นจะไปที่สอง Stream แยกกัน
- STDOUT: Standard Out คือที่ที่การตอบสนองมาตรฐานจากคำสั่งไป ตัวอย่างเช่น การตอบสนองมาตรฐานสำหรับคำสั่ง DIR คือ รายการไฟล์ภายในไดเรกทอรี
- STDERR: Standard Error คือที่ที่ข้อความข้อผิดพลาดไป ถ้ามีปัญหากับคำสั่ง ตัวอย่างเช่น ถ้าไม่มีไฟล์ในไดเรกทอรี คำสั่ง DIR จะ Output "File Not Found" ไปที่ Standard Error stream
คุณสามารถ Redirect output ไปยังไฟล์ใน Windows สำหรับทั้งสอง Output streams นี้ได้
Redirect Standard Output เขียนไปยังไฟล์ใหม่
มีสองวิธีที่คุณสามารถ Redirect standard output ของคำสั่งไปยังไฟล์ วิธีแรกคือ ส่งการเขียน Output ของคำสั่งไปยังไฟล์ใหม่ทุกครั้งที่คุณรันคำสั่ง
เพื่อทำเช่นนี้ ให้เปิด Command Prompt และพิมพ์:
dir test.exe > myoutput.txt
ตัวอักษร > บอกคอนโซลให้ Output STDOUT ไปยังไฟล์ที่มีชื่อที่คุณระบุ
เมื่อคุณรันคำสั่งนี้ คุณจะสังเกตว่าไม่มีการตอบสนองในหน้าต่างคำสั่ง ยกเว้นข้อผิดพลาดว่าไฟล์ไม่มีอยู่
นี่เป็นเพราะ Standard Output สำหรับคำสั่งถูก Redirect ไปยังไฟล์ชื่อ myoutput.txt ไฟล์ตอนนี้มีอยู่ในไดเรกทอรีเดียวกับที่คุณรันคำสั่ง Standard error output ยังแสดงผลตามปกติ
หมายเหตุ: ระวังให้เปลี่ยน Active directory สำหรับ Command Prompt ก่อนรันคำสั่ง เพื่อให้คุณรู้ว่าไฟล์ Output ถูกเก็บที่ไหน
คุณสามารถดู Standard Output ที่ไปยังไฟล์ได้โดยพิมพ์ "myoutput.txt" ในหน้าต่างคำสั่ง นี่จะเปิดไฟล์ข้อความใน Default text file viewer สำหรับคนส่วนใหญ่ มักจะเป็น Notepad.exe
ครั้งต่อไปที่คุณรันคำสั่งเดียวกัน ไฟล์ Output ก่อนหน้าจะถูกลบ ไฟล์ Output ใหม่จะถูกสร้างขึ้นพร้อม Output ล่าสุดของคำสั่ง
Redirect Standard Output เขียนไปยังไฟล์เดียวกัน (Append)
ถ้าคุณไม่ต้องการเขียนทับไฟล์เดิม อีกตัวเลือกคือ ใช้ >> แทน > เพื่อ Redirect ไปยังไฟล์ Output ในกรณีนี้ คุณจะพิมพ์:
dir test.exe >> myoutput.txt
คุณจะเห็น Output เดียวกัน (แค่ Error)
แต่ในกรณีนี้ แทนที่จะเขียนทับไฟล์ Output คำสั่งนี้จะ Append (ต่อท้าย) Output ใหม่ไปยังไฟล์ Output ที่มีอยู่แล้ว
ทุกครั้งที่คุณรันคำสั่งและ Append output ไปยังไฟล์ มันจะเขียน Standard Output ใหม่ไปท้ายไฟล์ที่มีอยู่
Redirect Standard Error ไปยังไฟล์
เหมือนกันที่คุณสามารถ Redirect standard output ไปยังไฟล์ คุณก็สามารถ Output standard error stream ไปยังไฟล์ได้
เพื่อทำเช่นนี้ คุณต้องเพิ่ม 2> ท้ายคำสั่ง ตามด้วยไฟล์ Error output ที่คุณต้องการสร้าง
ในตัวอย่างนี้ คุณจะพิมพ์คำสั่ง:
dir test.exe > myoutput.txt 2> output.err
นี่ส่ง Standard output stream ไป myoutput.txt และ Standard error stream ไป output.err ผลลัพธ์คือ ไม่มี Output stream ใดๆ แสดงในหน้าต่างคอนโซลเลย
อย่างไรก็ตาม คุณสามารถดูข้อความข้อผิดพลาดได้โดยพิมพ์ output.err นี่จะเปิดไฟล์ใน Default text file viewer
ตามที่คุณเห็น ข้อความข้อผิดพลาดจากคำสั่งถูก Output ไปยังไฟล์ Error เหมือนกับ Standard output คุณสามารถใช้ >> แทน เพื่อ Append error ไปยัง error จากคำสั่งที่รันก่อนหน้า
Redirect ทุก Output เข้าไฟล์เดียวกัน
ทุกวิธีข้างต้นให้หลายไฟล์ หนึ่งไฟล์สำหรับ Standard output stream และอีกไฟล์สำหรับ Standard error stream
ถ้าคุณต้องการรวมทั้งสอง Output เข้าไฟล์เดียวกัน คุณทำได้ เพียง Redirect ทุก output ไปยังไฟล์เดียวกันด้วยคำสั่งต่อไปนี้
dir test.exe 1> myoutput.txt 2>&1
นี่คือวิธีที่คำสั่งนี้ทำงาน:
- Standard output ถูกนำทางไปยังไฟล์ Output ที่ระบุโดยหมายเลข Output 1
- Standard error output ที่ระบุโดยหมายเลข 2 ถูก Redirect ไปยังไฟล์ Output ที่ระบุโดยหมายเลข 1
นี่จะต่อท้าย Error output ไปท้าย Standard output
นี่เป็นวิธีที่มีประโยชน์ในการดู Output ทั้งหมดสำหรับคำสั่งใดๆ ในไฟล์เดียว
ปิดเสียง Standard หรือ Error Output Streams
คุณยังสามารถปิด Standard Output หรือ Standard Error ได้ โดยการ Redirect output ไปยัง NUL แทนไฟล์
ใช้ตัวอย่างข้างต้น ถ้าคุณต้องการแค่ Standard Output และไม่ต้องการ Standard Error เลย คุณสามารถใช้คำสั่งต่อไปนี้:
dir test.exe 1> myoutput.txt 2>nul
นี่จะให้ Output file เหมือนตัวอย่างแรกข้างต้นที่คุณ Redirect แค่ Standard Output แต่ด้วยคำสั่งนี้ Error จะไม่ Echo ภายในคอนโซล และจะไม่สร้างไฟล์ Error log ด้วย
นี่มีประโยชน์ถ้าคุณไม่แคร์เรื่อง Error และไม่ต้องการให้มันรบกวน
คุณสามารถทำคำสั่ง Output เหล่านี้จากภายใน BAT file ได้ และ Output จากบรรทัดนั้นจะไปยังไฟล์ Output ที่คุณระบุ นี่เป็นวิธีที่มีประโยชน์ในการดูว่าคำสั่งภายใน BAT file ไหนมี Error ตอนพยายามรัน