วิธีหนึ่งที่มีประโยชน์ที่สุดในการบันทึกและแก้ไขปัญหาการทำงานของคำสั่งหรือชุดงานที่คุณเรียกใช้บน Windows คือการเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์
อย่างไรก็ตาม คุณสามารถเปลี่ยนเส้นทางการเขียนบรรทัดคำสั่งไปยังไฟล์ได้หลายวิธี ตัวเลือกที่คุณเลือกขึ้นอยู่กับว่าคุณต้องการดูผลลัพธ์ของคำสั่งอย่างไร

วิธีการทำงานของเอาต์พุตพร้อมท์คำสั่งของ Windows
เมื่อคุณพิมพ์คำสั่งในคอนโซล Windows (พร้อมท์คำสั่ง) เอาต์พุตจากคำสั่งนั้นจะไปที่สตรีมสองสตรีมแยกกัน
- STDOUT :Standard Out คือที่ที่การตอบสนองมาตรฐานจากคำสั่งไป ตัวอย่างเช่น การตอบสนองมาตรฐานสำหรับคำสั่ง DIR คือรายการไฟล์ภายในไดเร็กทอรี
- STDERR :ข้อผิดพลาดมาตรฐานเป็นที่ที่ข้อความแสดงข้อผิดพลาดไปหากมีปัญหากับคำสั่ง ตัวอย่างเช่น หากไม่มีไฟล์ในไดเรกทอรี คำสั่ง DIR จะส่งออก “ไม่พบไฟล์” ไปยังสตรีมข้อผิดพลาดมาตรฐาน
คุณสามารถเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ใน Windows สำหรับสตรีมเอาต์พุตทั้งสองนี้ได้
เปลี่ยนเส้นทางการเขียนเอาต์พุตมาตรฐานไปยังไฟล์ใหม่
มีสองวิธีที่คุณสามารถเปลี่ยนเส้นทางเอาต์พุตมาตรฐานของคำสั่งไปยังไฟล์ได้ อย่างแรกคือการส่งเอาต์พุตคำสั่งเขียนไปยังไฟล์ใหม่ทุกครั้งที่คุณเรียกใช้คำสั่ง
โดยเปิดพรอมต์คำสั่งแล้วพิมพ์:
dir test.exe > myoutput.txt
อักขระ> บอกให้คอนโซลส่งออก STDOUT ไปยังไฟล์ที่มีชื่อที่คุณระบุ
เมื่อคุณเรียกใช้คำสั่งนี้ คุณจะสังเกตเห็นว่าไม่มีการตอบสนองใดๆ ในหน้าต่างคำสั่ง ยกเว้นข้อผิดพลาดที่ไฟล์ไม่มีอยู่

เนื่องจากเอาต์พุตมาตรฐานสำหรับคำสั่งถูกเปลี่ยนเส้นทางไปยังไฟล์ชื่อ myoutput.txt ไฟล์นี้อยู่ในไดเร็กทอรีเดียวกันกับที่คุณรันคำสั่ง เอาต์พุตข้อผิดพลาดมาตรฐานยังคงแสดงตามปกติ
หมายเหตุ :โปรดใช้ความระมัดระวังในการเปลี่ยนไดเร็กทอรีแอ็คทีฟสำหรับพรอมต์คำสั่งก่อนที่จะรันคำสั่ง วิธีนี้จะทำให้คุณรู้ว่าไฟล์ที่ส่งออกเก็บไว้ที่ไหน
คุณสามารถดูเอาต์พุตมาตรฐานที่ไปยังไฟล์ได้โดยพิมพ์ "myoutput.txt" ในหน้าต่างคำสั่ง การดำเนินการนี้จะเปิดไฟล์ข้อความในโปรแกรมดูไฟล์ข้อความเริ่มต้นของคุณ สำหรับคนส่วนใหญ่ นี่คือ Notepad.exe

ครั้งต่อไปที่คุณเรียกใช้คำสั่งเดียวกัน ไฟล์เอาต์พุตก่อนหน้าจะถูกลบออก ไฟล์เอาต์พุตใหม่จะถูกสร้างขึ้นใหม่ด้วยเอาต์พุตของคำสั่งล่าสุด
เปลี่ยนเส้นทางเอาต์พุตมาตรฐานเขียนไปยังไฟล์เดียวกัน
จะทำอย่างไรถ้าคุณไม่ต้องการเขียนทับไฟล์เดียวกัน อีกทางเลือกหนึ่งคือใช้>> แทน> เพื่อเปลี่ยนเส้นทางไปยังไฟล์เอาต์พุต ในกรณีของตัวอย่างนี้ คุณจะต้องพิมพ์:
dir test.exe >> myoutput.txt
คุณจะเห็นผลลัพธ์เดียวกัน (ข้อผิดพลาดเท่านั้น)

แต่ในกรณีนี้ แทนที่จะเขียนทับไฟล์เอาต์พุต คำสั่งนี้จะผนวกเอาต์พุตใหม่เข้ากับไฟล์เอาต์พุตที่มีอยู่

ทุกครั้งที่คุณเรียกใช้คำสั่งและเพิ่มเอาต์พุตไปยังไฟล์ คำสั่งนั้นจะเขียนเอาต์พุตมาตรฐานใหม่ไปที่ส่วนท้ายของไฟล์ที่มีอยู่
เปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังไฟล์
เช่นเดียวกับที่คุณสามารถเปลี่ยนเส้นทางการเขียนเอาต์พุตมาตรฐานไปยังไฟล์ คุณยังสามารถส่งออกสตรีมข้อผิดพลาดมาตรฐานไปยังไฟล์ได้อีกด้วย
ในการดำเนินการนี้ คุณจะต้องเพิ่ม 2> ต่อท้ายคำสั่ง ตามด้วยไฟล์แสดงข้อผิดพลาดที่คุณต้องการสร้าง
ในตัวอย่างนี้ คุณจะต้องพิมพ์คำสั่ง:
dir test.exe > myoutput.txt 2> output.err
สิ่งนี้จะส่งสตรีมเอาต์พุตมาตรฐานไปที่ myoutput.txt และสตรีมข้อผิดพลาดมาตรฐานไปที่ output.err ผลลัพธ์คือไม่มีเอาต์พุตสตรีมปรากฏในหน้าต่างคอนโซลเลย

อย่างไรก็ตาม คุณสามารถดูข้อความแสดงข้อผิดพลาดได้โดยพิมพ์ output.err . การดำเนินการนี้จะเปิดไฟล์ในโปรแกรมดูไฟล์ข้อความเริ่มต้นของคุณ

อย่างที่คุณเห็น ข้อความแสดงข้อผิดพลาดจากคำสั่งจะถูกส่งออกไปยังไฟล์ข้อผิดพลาด เช่นเดียวกับเอาต์พุตมาตรฐาน คุณสามารถใช้ >> แทนการผนวกข้อผิดพลาดต่อข้อผิดพลาดจากคำสั่งที่เรียกใช้ก่อนหน้านี้แทน
เปลี่ยนเส้นทางการเขียนเอาต์พุตทั้งหมดไปยังไฟล์เดียวกัน
วิธีการทั้งหมดข้างต้นส่งผลให้เกิดไฟล์หลายไฟล์ ไฟล์หนึ่งใช้สำหรับสตรีมเอาต์พุตมาตรฐานและอีกไฟล์สำหรับสตรีมข้อผิดพลาดมาตรฐาน
หากคุณต้องการรวมเอาท์พุตทั้งสองนี้ไว้ในไฟล์เดียวกัน คุณก็สามารถทำได้เช่นกัน ในการดำเนินการนี้ คุณเพียงแค่เปลี่ยนเส้นทางเอาต์พุตทั้งหมดไปยังไฟล์เดียวกันโดยใช้คำสั่งต่อไปนี้
dir test.exe 1> myoutput.txt 2>&1
วิธีการทำงานของคำสั่งนี้:
- เอาต์พุตมาตรฐานถูกนำไปยังไฟล์เอาต์พุตที่ระบุโดยเอาต์พุตหมายเลข 1
- เอาต์พุตข้อผิดพลาดมาตรฐานที่ระบุโดยหมายเลข 2 ถูกเปลี่ยนเส้นทางไปยังไฟล์เอาต์พุตที่ระบุด้วยหมายเลข 1
สิ่งนี้จะเพิ่มเอาต์พุตข้อผิดพลาดต่อท้ายเอาต์พุตมาตรฐาน

นี่เป็นวิธีที่มีประโยชน์ในการดูผลลัพธ์ทั้งหมดสำหรับคำสั่งใดๆ ในไฟล์เดียว
ปิดเสียงมาตรฐานหรือสตรีมเอาต์พุตข้อผิดพลาด
คุณยังสามารถปิดเอาต์พุตมาตรฐานหรือข้อผิดพลาดมาตรฐานโดยเปลี่ยนเส้นทางเอาต์พุตไปยัง NUL แทนไฟล์
จากตัวอย่างข้างต้น หากคุณต้องการเพียงเอาต์พุตมาตรฐานและไม่มีข้อผิดพลาดมาตรฐาน คุณสามารถใช้คำสั่งต่อไปนี้:
dir test.exe 1> myoutput.txt 2>nul
ซึ่งจะส่งผลให้ไฟล์เอาต์พุตเดียวกันกับตัวอย่างแรกด้านบนที่คุณเปลี่ยนเส้นทางเฉพาะเอาต์พุตมาตรฐาน แต่ด้วยคำสั่งนี้ ข้อผิดพลาดจะไม่สะท้อนภายในคอนโซล มันจะไม่สร้างไฟล์บันทึกข้อผิดพลาดเช่นกัน
สิ่งนี้มีประโยชน์หากคุณไม่สนใจข้อผิดพลาดใดๆ และไม่ต้องการให้กลายเป็นสิ่งรบกวน
คุณสามารถดำเนินการคำสั่งเอาต์พุตเดียวกันด้านบนจากภายในไฟล์ BAT และเอาต์พุตจากบรรทัดนั้นจะไปที่ไฟล์เอาต์พุตที่คุณระบุ นี่เป็นวิธีที่มีประโยชน์ในการดูว่าคำสั่งในไฟล์ BAT มีข้อผิดพลาดหรือไม่เมื่อพยายามเรียกใช้