2013-03-11 11 views
24

Używam różnych testów Java i chcę zarchiwizować wyniki. I wykonanie (DACAPO) benchmark tak:Windows Batch Script: Przekieruj WSZYSTKIE dane wyjściowe do pliku

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

mijam rodzaj odniesienia w ciągu parametr, to jest to co jest% arg1%.

Widać, że przekierowuję dane wyjściowe do pliku tekstowego. Niestety, pierwsza i ostatnia linia wyjścia jest nadal drukowane w konsoli a nie do pliku tekstowego:

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

Zwłaszcza ostatnia linia będzie ważne, aby mieć w pliku tekstowym :)

Czy istnieje sztuczka, aby zmusić to zachowanie?

Odpowiedz

45

Musisz przekierować STDOUT i STDERR.

command > logfile 2>&1

+2

Czego 2> & 1 w ogóle znaczy? Powiedzieć, że jest to nieintuicyjna składnia, byłaby komplementem najwyższej klasy. – vargonian

+8

STDIN jest deskryptorem pliku # 0. STDOUT jest deskryptorem pliku # 1. STDERR jest deskryptorem pliku # 2. Podobnie jak "plik polecenia" przekierowuje STDOUT do pliku, możesz również przekierować dowolne deskryptory plików do siebie nawzajem. Operator "> &" przekierowuje między deskryptorami plików. Zatem "2> i 1" przekierowuje wszystkie STDERR na wyjście STDOUT. –

+0

Dziękuję bardzo, Zach, to demistifies to! – vargonian

4

Dodaj 2> & 1 do polecenia:

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

To będzie przekierować stderr do stdout, który jest następnie przekierowany do swojego pliku tekstowego.

Powiązane problemy