У меня есть пакетный скрипт, который запускает сервер.
Этот сервер затем распечатывает свои журналы в STDOUT и STDERR в случае ошибок.
Я хочу перенаправить STDOUT и STDERR в команду tee, чтобы разделить вывод.
С помощью команды tee
из UnxUtils это работало просто отлично.
Однако, чтобы сделать мое приложение переносимым, я не могу зависеть от UnxUtils, поэтому мне нужно написать собственную команду tee.
Я написал пакетный скрипт, который считывает STDOUT, как предложено в этом ответе (2. кодовый блок).
Это работает, но только для перенаправленного STDOUT, а не для STDERR.
Примечание. Вывод из STDERR отсутствует как в файле, так и в командной строке.
Как я могу заставить его читать оба потока?
Как перенаправить вывод (% 1 - сервер,% 2 - файл, на который я хочу перейти в журналы)?
%1 2>&1 | %~dp0tee.bat -a %2
Это прекрасно работает (так как вызывает UnxUtils, а не мой пакетный скрипт):
%1 2>&1 | tee -a %2
Как я читаю ввод в tee.bat
:
for /F "tokens=*" %%a in ('findstr /n $') do (
set "line=%%a"
setlocal EnableDelayedExpansion
set "line=!line:*:=!"
echo(!line!
if %append%==true (
echo(!line! >> %output%
) else (
echo(!line! > %output%
)
endlocal
)