Một trong những cách hữu ích nhất để ghi nhật ký và khắc phục sự cố hành vi của lệnh hoặc tác vụ batch chạy trên Windows là chuyển hướng đầu ra ra tệp.
Tuy nhiên, có vài cách khác nhau chuyển hướng ghi dòng lệnh ra 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ách đầu ra Command Prompt Windows hoạt động
Khi bạn gõ lệnh trong bảng điều khiển Windows (command prompt), đầu ra từ lệnh đi đến hai luồng riêng biệt.
- STDOUT: Đầu ra chuẩn là nơi phản hồi tiêu chuẩn từ lệnh đi. Ví dụ phản hồi chuẩn cho lệnh DIR là danh sách tệp trong thư mục.
- STDERR: Lỗi chuẩn là nơi thông báo lỗi đi nếu có vấn đề với lệnh. Ví dụ nếu không có tệp trong thư mục, lệnh DIR sẽ xuất "File Not Found" ra luồng Lỗi chuẩn.
Bạn có thể chuyển hướng đầu ra ra tệp trong Windows cho cả hai luồng đầu ra này.
Chuyển hướng đầu ra chuẩn ghi ra tệp mới
Có hai cách chuyển hướng đầu ra chuẩn của lệnh ra tệp. Cách đầu là gửi ghi đầu ra lệnh ra tệp mới mỗi lần chạy lệnh.
Để làm, mở command prompt và gõ:
dir test.exe > myoutput.txt
Ký tự > bảo bảng điều khiển xuất STDOUT ra tệp tên bạn cung cấp.
Khi chạy lệnh, bạn nhận thấy không có phản hồi trong cửa sổ lệnh trừ lỗi tệp không tồn tại.
Điều này vì đầu ra chuẩn cho lệnh được chuyển hướng ra tệp myoutput.txt. Tệp giờ tồn tại cùng thư mục bạn chạy lệnh. Đầu ra lỗi chuẩn vẫn hiển thị như bình thường.
Lưu ý: Cẩn thận đổi thư mục hoạt động cho command prompt trước khi chạy lệnh. Cách này bạn biết tệp đầu ra lưu ở đâu.
Bạn xem đầu ra chuẩn vào tệp bằng gõ "myoutput.txt" trong cửa sổ lệnh. Điều này mở tệp văn bản trong trình xem mặc định. Đối với hầu hết, thường là Notepad.exe.
Lần sau chạy cùng lệnh, tệp đầu ra trước bị xóa. Tệp đầu ra mới tạo với đầu ra lệnh mới nhất.
Chuyển hướng ghi đầu ra chuẩn ra cùng tệp
Nếu không muốn ghi đè cùng tệp? Tùy chọn khác dùng >> thay vì > để chuyển hướng ra tệp đầu ra. Trong ví dụ này, bạn gõ:
dir test.exe >> myoutput.txt
Bạn thấy cùng đầu ra (chỉ lỗi).
Nhưng trường hợp này, thay vì ghi đè tệp đầu ra, lệnh nối đầu ra mới vào tệp đầu ra hiện có.
Mỗi lần chạy lệnh và nối đầu ra ra tệp, nó ghi đầu ra chuẩn mới vào cuối tệp hiện có.
Chuyển hướng lỗi chuẩn ra tệp
Cùng cách chuyển hướng ghi đầu ra chuẩn ra tệp, bạn cũng có thể xuất luồng lỗi chuẩn ra tệp.
Để làm, cần thêm 2> cuối lệnh, theo sau tệp lỗi đầu ra bạn muốn tạo.
Trong ví dụ này, gõ lệnh:
dir test.exe > myoutput.txt 2> output.err
Điều này gửi luồng đầu ra chuẩn ra myoutput.txt, và luồng lỗi chuẩn ra output.err. Kết quả không luồng đầu ra nào hiển thị trong cửa sổ bảng điều khiển.
Tuy nhiên, bạn xem thông báo lỗi bằng gõ output.err. Điều này mở tệp trong trình xem tệp văn bản mặc định.
Như bạn thấy, mọi thông báo lỗi từ lệnh xuất ra tệp lỗi. Giống đầu ra chuẩn, bạn dùng >> thay vào đó để nối lỗi vào lỗi từ lệnh chạy trước.
Chuyển hướng tất cả đầu ra ghi ra cùng tệp
Tất cả cách trên tạo nhiều tệp. Một cho luồng đầu ra chuẩn, một cho luồng lỗi chuẩn.
Nếu muốn bao gồm cả hai đầu ra vào cùng tệp, bạn cũng làm được. Để làm, chỉ cần chuyển hướng tất cả đầu ra ra cùng tệp dùng lệnh sau.
dir test.exe 1> myoutput.txt 2>&1
Cách lệnh này hoạt động:
- Đầu ra chuẩn chuyển đến tệp đầu ra xác định bởi số đầu ra 1.
- Đầu ra lỗi chuẩn xác định bởi số 2 chuyển hướng đến tệp đầu ra xác định bởi số 1.
Điều này nối đầu ra lỗi vào cuối đầu ra chuẩn.
Đây 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 luồng đầu ra chuẩn hoặc lỗi
Bạn cũng tắt Đầu ra Chuẩn hoặc Lỗi Chuẩn bằng chuyển hướng đầu ra ra NUL thay vì tệp.
Dùng ví dụ trên, nếu chỉ muốn Đầu ra Chuẩn và không Lỗi Chuẩn, dùng lệnh:
dir test.exe 1> myoutput.txt 2>nul
Điều này cho cùng tệp đầu ra như ví dụ đầu chỉ chuyển hướng Đầu ra Chuẩn, nhưng lệnh này lỗi không hiển thị trong bảng điều khiển. Nó cũng không tạo tệp nhật ký lỗi.
Hữu ích nếu không quan tâm lỗi và không muốn chúng thành phiền toái.
Bạn thực hiện bất kỳ lệnh đầu ra trên từ trong tệp BAT và đầu ra từ dòng đó đi đến tệp đầu ra bạn chỉ định. Đây cách hữu ích xem bất kỳ lệnh trong tệp BAT có lỗi khi chạy không.