Небольшой пост из серии спрашивали — отвечаем.
Примечание: это работает только в версиях 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
ФАНФАРЫ!