Незважаючи на те, що прийнята відповідь на це питання є правильною, він насправді не дуже багато пояснює, чому це працює, і оскільки синтаксис не відразу зрозумілий, я зробив швидкий google, щоб дізнатися, що відбувається насправді. Сподіваючись, що ця інформація буде корисною для інших, я її розміщую тут.
Перенаправлення повідомлень про помилки з командного рядка: STDERR / STDOUT
Підсумок
Під час перенаправлення виводу з програми за допомогою символу '>' повідомлення про помилки все ще друкуються на екран. Це відбувається тому, що повідомлення про помилки часто надсилаються до потоку Standard Error замість потоку Standard Out.
Вихід з консольного (командного рядка) програми чи команди часто надсилається до двох окремих потоків. Звичайний вихід надсилається в стандартний вихід (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