Пакетный сценарий Windows: перенаправить ВСЕ выходные в файл

Я использую различные тесты Java и хочу заархивировать результаты. Я выполняю тест (dacapo) следующим образом:

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

Я передаю тип эталонного параметра по параметру, то есть%arg1%.

Вы можете видеть, что я перенаправляю вывод в текстовый файл. К сожалению, первая и последняя строка вывода все еще печатается в консоли, а не в текстовом файле:

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

Особенно важна последняя строка в текстовом файле:)

Есть ли уловка, чтобы заставить это поведение?

2 ответа

Решение

Вы должны перенаправить STDOUT и STDERR.

command > logfile 2>&1

STDIN - это файловый дескриптор # 0, STDOUT - это файловый дескриптор #1, а STDERR - файловый дескриптор #2.
Так же, как "команда> файл" перенаправляет STDOUT в файл, вы также можете перенаправлять произвольные файловые дескрипторы друг другу. >& Оператор перенаправляет между файловыми дескрипторами. Так, 2 >& 1 перенаправляет весь выход STDERR в STDOUT.

Кроме того, будьте осторожны, чтобы добавить 2>&1 в конце инструкции, потому что в Windows важен порядок перенаправления command 2>&1 > logfile создаст пустой файл, как добавил Давид в комментариях.

Добавьте 2>&1 к вашей команде:

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

Это перенаправит STDERR в STDOUT, который затем будет перенаправлен в ваш текстовый файл.

Другие вопросы по тегам