Небольшой пост из серии спрашивали — отвечаем.
Примечание: это работает только в версиях Windows, где командный процессор умеет в расширенную обработку команд, т.е., начиная с Windows 2000.
Расширенная обработка команд по умолчанию включена в Windows Server 2003/Windows XP, но может быть отключена через Реестр, так что для совместимости лучше ее включить явно:
SetLocal EnableExtensions
Команда echo
по умолчанию выводит на STDOUT
, т.е., например, команда:
echo I write to STDOUT
Выведет текст I write to STDOUT
на STDOUT
, да на мне капитанская фуражка 🙂
Для вывода текста на STDERR
необходимо использовать переопределение вывода, синтаксис которого похож на аналогичный синтаксис в Linux, т.е. в современных Windows тоже есть три канала ввода/вывода, с номерами, аналогичными Linux, т.е.:
1
— STDOUT
2
— STDERR
3
— STDIN
Стандартные потоки
Переопределяется вывод на STDERR
конструкцией 1>&2
, т.е. команда
echo I write to STDERR 1>&2
Выведет текст I write to STDERR
на STDERR
.
BAT-файл writeto.bat
целиком:
@echo off
SetLocal EnableExtensions
rem This BAT file write in stdout and stderr
echo I write to STDOUT
echo I write to STDERR 1>&2
Проверка
Для проверки работы BAT-файла можно создать тестовый BAT-файл, который будет вызывать файл writeto.bat
и перенаправлять потоки вывода STDOUT
и STDERR
в текстовые файлы.
Содержимое файла writeto_test.bat
:
@echo off
SetLocal EnableExtensions
rem This BAT file test for writeto.bat
call writeto.bat 1>_stdout.txt 2>_stderr.txt
Данный файл надо создать в каталоге с writeto.bat
.
После запуска файла writeto_test.bat
в текущем каталоге появятся файлы _stdout.txt
и _stderr.txt
со следующим содержимым:
_stdout.txt:
I write to STDOUT
_stderr.txt:
I write to STDERR
ФАНФАРЫ!
Пример на GitHub