Ответ 1
Если вы хотите добавить файл вместо того, чтобы постоянно создавать новый/удалять старый контент, используйте двойные метки >
. Единственный знак >
будет перезаписывать все содержимое файла.
Перезаписать файл
MyCommand.exe>file.txt
^ Это откроет файл file.txt, если он уже существует и перезаписывает данные, или создает новый файл и заполняет его выходным
Добавить файл из своей конечной точки
MyCommand.exe>>file.txt
^ Это добавит файл file.txt из его текущего конца файла, если он уже существует, или создайте новый файл и заполните его своим выходом.
Обновление # 1 (расширенное):
Моя партия-fu со временем улучшилась, поэтому некоторые незначительные обновления.
Если вы хотите различать вывод ошибки и нормальный вывод для программы, которая правильно использует Стандартные потоки, STDOUT
/STDERR
, вы можете сделать это с незначительными изменениями в синтаксисе. Я просто использую >
для перезаписи для этих примеров, но они отлично работают с >>
для append в отношении перенаправления вывода файлов файлов.
1
до >>
или >
- это флаг для STDOUT. Если вам нужно на самом деле вывести номер один или два перед символами повторного направления, это может привести к странным, неинтуитивным ошибкам, если вы не знаете об этом механизме. Это особенно актуально при выводе единственного номера результата в файл. 2
перед символами повторного направления для STDERR.
Теперь, когда вы знаете, что у вас имеется более одного потока, это хорошее время, чтобы показать преимущества вывода на nul
. Теперь вывод в nul
работает так же концептуально, как вывод в файл. Вы не видите контент в консоли. Вместо того, чтобы собирать файл или ваш выход в консоль, он переходит в пустоту.
STDERR для файла и подавления STDOUT
MyCommand.exe 1>nul 2>errors.txt
STDERR, чтобы записывать только ошибки журнала. Сохраняет STDOUT в консоли
MyCommand.exe 2>errors.txt
STDOUT для файла и подавления STDERR
MyCommand.exe 1>file.txt 2>nul
STDOUT только для файла. Будет держать STDERR в консоли
MyCommand.exe 1>file.txt
STDOUT в один файл и STDERR в другой файл
MyCommand.exe 1>stdout.txt 2>errors.txt
Единственное предостережение, которое я имею здесь, это то, что он может создать 0-байтовый файл для неиспользуемого потока, если один из потоков никогда не будет использоваться. В принципе, если ошибок не было, вы можете получить 0-байтный файл errors.txt.
Обновление # 2
Я начал замечать странное поведение при написании консольных приложений, которые писали напрямую на STDERR
, и понял, что если бы я хотел, чтобы мой вывод ошибки попадал в один и тот же файл при использовании базового трубопровода, мне приходилось комбинировать потоки 1
и 2
или просто используйте STDOUT
. Проблема с этой проблемой заключается в том, что я не знал о правильном способе объединения потоков, который this:
%command% > outputfile 2>&1
Поэтому, если вы хотите, чтобы все теги STDOUT и STDERR были отправлены в один поток, убедитесь, что вы используете их так:
MyCommand.exe > file.txt 2>&1
Редиректор по умолчанию по умолчанию имеет значение 1>
или 1>>
, даже если вы явно не используете 1
перед ним, если вы не используете число перед ним, а комбинация 2>&1
потоки.