เปลี่ยนเส้นทางเอาต์พุตจากบรรทัดคำสั่งของ Windows ไปยังไฟล์ข้อความ

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

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

วิธีการทำงานของเอาต์พุตพรอมต์คำสั่งของ Windows(How Windows Command Prompt Output Works)

เมื่อคุณพิมพ์คำสั่งในคอนโซลWindows ( command prompt ) เอาต์พุตจากคำสั่งนั้นจะไปที่สตรีมแยกกันสองสตรีม

  • STDOUT : Standard Outคือที่ที่การตอบสนองมาตรฐานจากคำสั่งต่างๆ จะไป ตัวอย่างเช่น การตอบสนองมาตรฐานสำหรับ คำสั่ง DIRคือรายการไฟล์ภายในไดเร็กทอรี
  • STDERR : Standard Errorคือที่ที่ข้อความแสดงข้อผิดพลาดจะไปหากมีปัญหากับคำสั่ง ตัวอย่างเช่น หากไม่มีไฟล์ในไดเร็กทอรีคำสั่งDIR จะส่งออก " ไม่พบไฟล์(File) " ไปยัง สตรีมข้อผิดพลาดมาตรฐาน(Standard Error)

คุณสามารถเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ในWindowsสำหรับเอาต์พุตสตรีมทั้งสองนี้ได้

เปลี่ยนเส้นทางเอาต์พุตมาตรฐานเขียนไปยังไฟล์ใหม่(Redirect Standard Output Write to New File)

มีสองวิธีที่คุณสามารถเปลี่ยนเส้นทางเอาต์พุตมาตรฐานของคำสั่งไปยังไฟล์ได้ อย่างแรกคือการส่งเอาต์พุตคำสั่งเขียนไปยังไฟล์ใหม่ทุกครั้งที่คุณเรียกใช้คำสั่ง

ในการดำเนินการนี้ ให้เปิดพรอมต์คำสั่งแล้วพิมพ์:

dir test.exe > myoutput.txt

อักขระ > บอกให้คอนโซลส่งออกSTDOUTไปยังไฟล์ด้วยชื่อที่คุณระบุ

เมื่อคุณเรียกใช้คำสั่งนี้(run this command)คุณจะสังเกตเห็นว่าไม่มีการตอบสนองใดๆ ในหน้าต่างคำสั่ง ยกเว้นข้อผิดพลาดที่ไฟล์นั้นไม่มีอยู่

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

หมายเหตุ(Note) : โปรดใช้ความระมัดระวังในการเปลี่ยนไดเร็กทอรีแอ็คทีฟ(change the active directory)สำหรับพรอมต์คำสั่งก่อนที่จะรันคำสั่ง วิธีนี้คุณจะรู้ว่าไฟล์เอาต์พุตถูกเก็บไว้ที่ใด

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

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

เปลี่ยนเส้นทางเอาต์พุตมาตรฐาน(Standard Output)เขียนไปยังไฟล์เดียวกัน(Same File)

จะทำอย่างไรถ้าคุณไม่ต้องการที่จะเขียนทับไฟล์เดียวกัน อีกทางเลือกหนึ่งคือใช้ >> แทน > เพื่อเปลี่ยนเส้นทางไปยังไฟล์เอาต์พุต ในกรณีของตัวอย่างนี้ คุณจะต้องพิมพ์:

dir test.exe >> myoutput.txt

คุณจะเห็นผลลัพธ์เดียวกัน (ข้อผิดพลาดเท่านั้น)

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

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

เปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปยังไฟล์(Redirect Standard Error To a File)

เช่นเดียวกับที่คุณสามารถเปลี่ยนเส้นทางการเขียนเอาต์พุตมาตรฐานไปยังไฟล์ คุณยังสามารถส่งออกสตรีมข้อผิดพลาดมาตรฐานไปยังไฟล์ได้อีกด้วย

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

ในตัวอย่างนี้ คุณจะต้องพิมพ์คำสั่ง: 

dir test.exe > myoutput.txt 2> output.err

สิ่งนี้จะส่งสตรีมเอาต์พุตมาตรฐานไปที่ myoutput.txt และสตรีมข้อผิดพลาดมาตรฐานไปที่ output.err ผลลัพธ์คือไม่มีเอาต์พุตสตรีมเลยแสดงในหน้าต่างคอนโซล

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

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

เปลี่ยนเส้นทางการเขียนเอาต์พุตทั้งหมดไปยังไฟล์เดียวกัน(Redirect All Output Writes to a Same File)

วิธีการทั้งหมดข้างต้นส่งผลให้เกิดไฟล์หลายไฟล์ ไฟล์หนึ่งใช้สำหรับสตรีมเอาต์พุตมาตรฐานและอีกไฟล์สำหรับสตรีมข้อผิดพลาดมาตรฐาน

หากคุณต้องการรวมเอาท์พุตทั้งสองนี้ไว้ในไฟล์เดียวกัน คุณก็สามารถทำได้เช่นกัน ในการดำเนินการนี้ คุณเพียงแค่เปลี่ยนเส้นทางเอาต์พุตทั้งหมดไปยังไฟล์เดียวกันโดยใช้คำสั่งต่อไปนี้

dir test.exe 1> myoutput.txt 2>&1

นี่คือวิธีการทำงานของคำสั่งนี้:

  • เอาต์พุตมาตรฐานจะถูกส่งไปยังไฟล์เอาต์พุตที่ระบุโดยเอาต์พุตหมายเลข 1
  • เอาต์พุตข้อผิดพลาดมาตรฐานที่ระบุโดยหมายเลข 2 ถูกเปลี่ยนเส้นทางไปยังไฟล์เอาต์พุตที่ระบุโดยหมายเลข 1

สิ่งนี้จะเพิ่มเอาต์พุตข้อผิดพลาดต่อท้ายเอาต์พุตมาตรฐาน

นี่เป็นวิธีที่มีประโยชน์ในการดูผลลัพธ์ทั้งหมดสำหรับคำสั่งใดๆ ในไฟล์เดียว 

การปิดเสียงสตรีมเอาต์พุตมาตรฐานหรือข้อผิดพลาด(Silencing Standard or Error Output Streams)

คุณยังสามารถปิดเอาต์พุต(Standard Output) มาตรฐาน หรือข้อผิดพลาดมาตรฐาน(Standard Error)โดยเปลี่ยนเส้นทางเอาต์พุตไปยังNULแทนไฟล์

จากตัวอย่างข้างต้น หากคุณต้องการเพียงเอาต์พุตมาตรฐาน(Standard Output)และไม่มีข้อผิดพลาดมาตรฐาน(Standard Error)เลย คุณสามารถใช้คำสั่งต่อไปนี้:

dir test.exe 1> myoutput.txt 2>nul

ซึ่งจะส่งผลให้ไฟล์เอาต์พุตเดียวกันกับตัวอย่างแรกด้านบนที่คุณเปลี่ยนเส้นทางStandard Outputเท่านั้น แต่ด้วยคำสั่งนี้ ข้อผิดพลาดจะไม่สะท้อนภายในคอนโซล มันจะไม่สร้างไฟล์บันทึกข้อผิดพลาดเช่นกัน

สิ่งนี้มีประโยชน์หากคุณไม่สนใจข้อผิดพลาดใดๆ และไม่ต้องการให้กลายเป็นสิ่งรบกวน

คุณสามารถดำเนินการคำสั่งเอาต์พุตเดียวกันด้านบนจากภายในไฟล์ BAT(inside a BAT file)และเอาต์พุตจากบรรทัดนั้นจะไปที่ไฟล์เอาต์พุตที่คุณระบุ นี่เป็นวิธีที่มีประโยชน์ในการดูว่าคำสั่งใน ไฟล์ BATมีข้อผิดพลาดหรือไม่เมื่อพยายามเรียกใช้



About the author

ฉันเป็นมืออาชีพด้านคอมพิวเตอร์ที่มีประสบการณ์การทำงานกับซอฟต์แวร์ Microsoft Office รวมถึง Excel และ PowerPoint ฉันยังมีประสบการณ์กับ Chrome ซึ่งเป็นเบราว์เซอร์ของ Google ทักษะของฉันรวมถึงการสื่อสารที่เป็นลายลักษณ์อักษรและด้วยวาจา การแก้ปัญหา และการคิดอย่างมีวิจารณญาณ



Related posts