Пакетный сценарий 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, который затем будет перенаправлен в ваш текстовый файл.