Chuyển hướng đầu ra từ Dòng lệnh Windows sang tệp văn bản

Một trong những cách hữu ích nhất để ghi nhật ký và khắc phục sự cố hoạt động của các lệnh hoặc công việc hàng loạt mà bạn chạy trên Windows là chuyển hướng đầu ra đến một tệp.

Tuy nhiên, có một số cách khác nhau để bạn có thể chuyển hướng ghi dòng lệnh vào tệp. Tùy chọn bạn chọn phụ thuộc vào cách bạn muốn xem đầu ra lệnh của mình.

Cách hoạt động của đầu ra Command Prompt của Windows(How Windows Command Prompt Output Works)

Khi bạn nhập một lệnh trong bảng điều khiển Windows ( dấu nhắc lệnh(command prompt) ), đầu ra từ lệnh đó sẽ chuyển đến hai luồng riêng biệt.

  • STDOUT : Standard Out là nơi thực hiện bất kỳ phản hồi tiêu chuẩn nào từ các lệnh. Ví dụ: phản hồi tiêu chuẩn cho lệnh DIR là một danh sách các tệp bên trong một thư mục.
  • STDERR : Lỗi Chuẩn(Standard Error) là nơi xuất hiện bất kỳ thông báo lỗi nào nếu có vấn đề với lệnh. Ví dụ: nếu không có bất kỳ tệp nào trong thư mục, lệnh DIR sẽ xuất “ Không tìm thấy tệp(File) ” vào luồng Lỗi Chuẩn .(Standard Error)

Bạn có thể chuyển hướng đầu ra đến một tệp trong Windows cho cả hai luồng đầu ra này.

Chuyển hướng đầu ra chuẩn ghi vào tệp mới(Redirect Standard Output Write to New File)

Có hai cách bạn có thể chuyển hướng đầu ra tiêu chuẩn của một lệnh đến một tệp. Đầu tiên là gửi lệnh ghi đầu ra vào một tệp mới mỗi khi bạn chạy lệnh.

Để thực hiện việc này, hãy mở dấu nhắc lệnh và nhập:

dir test.exe > myoutput.txt

Ký tự> yêu cầu bảng điều khiển xuất STDOUT ra tệp có tên mà bạn đã cung cấp.

Khi bạn chạy lệnh này(run this command) , bạn sẽ nhận thấy rằng không có bất kỳ phản hồi nào trong cửa sổ lệnh ngoại trừ lỗi tệp không tồn tại.

Điều này là do đầu ra tiêu chuẩn cho lệnh đã được chuyển hướng đến một tệp có tên myoutput.txt. Tệp hiện tồn tại trong cùng một thư mục mà bạn đã chạy lệnh. Đầu ra lỗi tiêu chuẩn vẫn hiển thị như bình thường.

Lưu ý(Note) : Hãy cẩn thận thay đổi thư mục hoạt động(change the active directory) cho dấu nhắc lệnh trước khi chạy lệnh. Bằng cách này, bạn sẽ biết nơi lưu trữ các tệp đầu ra.

Bạn có thể xem đầu ra tiêu chuẩn của tệp bằng cách nhập “myoutput.txt” vào cửa sổ lệnh. Thao tác này sẽ mở tệp văn bản trong trình xem tệp văn bản mặc định của bạn. Đối với hầu hết mọi người, đây thường là Notepad.exe .

Lần sau khi bạn chạy lệnh tương tự, tệp đầu ra trước đó sẽ bị xóa. Một tệp đầu ra mới sẽ được tạo lại với đầu ra của lệnh mới nhất.

Chuyển hướng đầu ra chuẩn(Standard Output) được ghi vào cùng một tệp(Same File)

Điều gì xảy ra nếu bạn không muốn ghi đè lên cùng một tệp? Một tùy chọn khác là sử dụng >> thay vì> để chuyển hướng đến tệp đầu ra. Trong trường hợp của ví dụ này, bạn sẽ nhập:

dir test.exe >> myoutput.txt

Bạn sẽ thấy cùng một đầu ra (chỉ lỗi).

Nhưng trong trường hợp này, thay vì ghi đè tệp đầu ra, lệnh này sẽ nối đầu ra mới vào tệp đầu ra hiện có.

Mỗi khi bạn chạy một lệnh và nối đầu ra vào một tệp, nó sẽ ghi đầu ra chuẩn mới vào cuối tệp hiện có.

Chuyển hướng lỗi chuẩn sang tệp(Redirect Standard Error To a File)

Tương tự như cách bạn có thể chuyển hướng ghi đầu ra tiêu chuẩn vào tệp, bạn cũng có thể xuất luồng lỗi tiêu chuẩn vào tệp.

Để thực hiện việc này, bạn cần thêm 2> vào cuối lệnh, sau đó là tệp lỗi đầu ra mà bạn muốn tạo.

Trong ví dụ này, bạn sẽ nhập lệnh: 

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

Điều này sẽ gửi luồng đầu ra tiêu chuẩn đến myoutput.txt và luồng lỗi tiêu chuẩn đến output.err. Kết quả là không có luồng đầu ra nào được hiển thị trong cửa sổ bảng điều khiển.

Tuy nhiên, bạn có thể thấy thông báo lỗi bằng cách nhập output.err . Thao tác này sẽ mở tệp trong trình xem tệp văn bản mặc định của bạn.

Như bạn có thể thấy, bất kỳ thông báo lỗi nào từ lệnh đều được xuất ra tệp lỗi. Cũng(Just) như với đầu ra tiêu chuẩn, bạn có thể sử dụng >> thay thế để nối lỗi vào các lỗi từ các lệnh đã chạy trước đó.

Chuyển hướng tất cả các ghi đầu ra đến một tệp giống nhau(Redirect All Output Writes to a Same File)

Tất cả các phương pháp trên đều dẫn đến nhiều tệp. Một tệp dành cho luồng đầu ra tiêu chuẩn và tệp kia dành cho luồng lỗi tiêu chuẩn.

Nếu bạn muốn bao gồm cả hai kết quả đầu ra này vào cùng một tệp, bạn cũng có thể làm điều đó. Để làm điều này, bạn chỉ cần chuyển hướng tất cả đầu ra đến cùng một tệp bằng cách sử dụng lệnh sau.

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

Đây là cách lệnh này hoạt động:

  • Đầu ra tiêu chuẩn được chuyển hướng đến tệp đầu ra được xác định bởi đầu ra số 1.
  • Đầu ra lỗi tiêu chuẩn được xác định bởi số 2 được chuyển hướng đến tệp đầu ra được xác định bởi số 1.

Điều này sẽ nối đầu ra lỗi vào cuối đầu ra chuẩn.

Đây là một cách hữu ích để xem tất cả đầu ra cho bất kỳ lệnh nào trong một tệp. 

Tắt tiếng các luồng đầu ra chuẩn hoặc lỗi(Silencing Standard or Error Output Streams)

Bạn cũng có thể tắt Đầu ra Chuẩn(Standard Output) hoặc Lỗi Chuẩn(Standard Error) bằng cách chuyển hướng đầu ra thành NUL thay vì tệp.

Sử dụng ví dụ trên, nếu bạn chỉ muốn Đầu ra Chuẩn(Standard Output) và không có Lỗi Chuẩn(Standard Error) nào cả, bạn có thể sử dụng lệnh sau:

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

Điều này sẽ dẫn đến tệp đầu ra giống như ví dụ đầu tiên ở trên, nơi bạn chỉ chuyển hướng Đầu ra chuẩn(Standard Output) , nhưng với lệnh này, lỗi sẽ không xảy ra bên trong bảng điều khiển. Nó cũng sẽ không tạo ra một tệp nhật ký lỗi.

Điều này rất hữu ích nếu bạn không quan tâm đến bất kỳ lỗi nào và không muốn chúng trở thành mối phiền toái.

Bạn có thể thực hiện bất kỳ lệnh đầu ra nào tương tự ở trên từ bên trong tệp BAT(inside a BAT file) và đầu ra từ dòng đó sẽ chuyển đến tệp đầu ra mà bạn chỉ định. Đây là một cách hữu ích để xem liệu bất kỳ lệnh nào trong tệp BAT có bất kỳ lỗi nào khi chúng cố gắng chạy hay không.



About the author

Tôi là một kỹ sư phần cứng với hơn 10 năm kinh nghiệm trong lĩnh vực này. Tôi chuyên về bộ điều khiển và cáp USB, cũng như nâng cấp BIOS và hỗ trợ ACPI. Trong thời gian rảnh rỗi, tôi cũng thích viết blog về các chủ đề khác nhau liên quan đến công nghệ và kỹ thuật.



Related posts