Хотя принятый ответ на этот вопрос является правильным, на самом деле он мало чем объясняет, почему он работает, и, поскольку синтаксис не сразу понятен, я быстро нашел Google, чтобы выяснить, что на самом деле происходит. В надежде, что эта информация будет полезна для других, я публикую ее здесь.
Перенаправление сообщений об ошибках из командной строки: STDERR / STDOUT
Резюме
При перенаправлении вывода из приложения с помощью символа «>» сообщения об ошибках по-прежнему выводятся на экран. Это связано с тем, что сообщения об ошибках часто отправляются в поток стандартных ошибок вместо потока стандартных выходных данных.
Выходные данные консольного приложения (командной строки) или команды часто отправляются в два отдельных потока. Обычный выход отправляется на стандартный выход (STDOUT), а сообщения об ошибках отправляются на стандартную ошибку (STDERR). Когда вы перенаправляете вывод консоли, используя символ «>», вы перенаправляете только STDOUT. Чтобы перенаправить STDERR, вы должны указать «2>» для символа перенаправления. Это выбирает второй выходной поток, который является STDERR.
пример
Команда dir file.xxx
(где file.xxx
не существует) будет отображать следующий вывод:
Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not Found
Если вы перенаправите вывод на NUL
устройство с помощью dir file.xxx > nul
, вы все равно увидите часть сообщения об ошибке, например:
File Not Found
Чтобы перенаправить (только) сообщение об ошибке NUL
, используйте следующую команду:
dir file.xxx 2> nul
Или вы можете перенаправить вывод в одно место, а ошибки - в другое.
dir file.xxx > output.msg 2> output.err
Вы можете распечатать ошибки и стандартный вывод в один файл, используя команду «& 1», чтобы перенаправить вывод для STDERR в STDOUT, а затем отправить вывод из STDOUT в файл:
dir file.xxx 1> output.msg 2>&1