2013-03-11 29 views
24

Tôi đang chạy các điểm chuẩn Java khác nhau và muốn lưu trữ kết quả. Tôi thực hiện điểm chuẩn (dacapo) như sau:Kịch bản lệnh Windows: Chuyển hướng TẤT CẢ đầu ra đến một tệp

C:\VM\jre\bin\java -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% > %time::=% 

Tôi chuyển loại điểm chuẩn trong tham số, đó là% arg1%.

Bạn có thể thấy rằng tôi đang chuyển hướng đầu ra tới một tệp văn bản. Thật không may, dòng đầu tiên và cuối cùng của đầu ra vẫn còn in trong giao diện điều khiển và không vào textfile:

===== DaCapo 9.12 luindex starting ===== 
===== DaCapo 9.12 luindex PASSED in 2000 msec ===== 

Đặc biệt là dòng cuối cùng sẽ là quan trọng để có trong file văn bản :)

Có một thủ thuật để ép buộc hành vi này?

Trả lời

45

Bạn phải chuyển hướng STDOUT và STDERR.

command > logfile 2>&1

+2

2> & 1 có nghĩa là gì? Để nói rằng đó là cú pháp không trực quan sẽ là một lời khen của thứ tự cao nhất. – vargonian

+8

STDIN là bộ mô tả tập tin # 0. STDOUT là bộ mô tả tập tin # 1. STDERR là bộ mô tả tập tin # 2. Cũng giống như "lệnh> tập tin" chuyển hướng STDOUT vào một tập tin, bạn cũng có thể chuyển hướng mô tả tập tin tùy ý để eachother. Toán tử "> &" chuyển hướng giữa các bộ mô tả tệp. Vì vậy, "2> & 1" chuyển hướng tất cả đầu ra STDERR sang STDOUT. –

+0

Cảm ơn bạn rất nhiều, Zach, điều này làm sáng tỏ nó! – vargonian

4

Thêm 2> & 1 tới lệnh của bạn:

C:\VM\jre\bin\java -jar C:\benchmarks\dacapo-9.12-bach.jar %arg1% 2>&1 > %time::=% 

này sẽ chuyển hướng thiết bị lỗi chuẩn để STDOUT mà sau đó được chuyển vào textfile của bạn.

Các vấn đề liên quan