Это вариант предыдущего ответа от MTS, однако он добавляет некоторые функции, которые могут быть полезны для других. Вот метод, который я использовал:
- В качестве переменной задается команда, которую можно использовать позже в коде для вывода в командное окно и добавления в файл журнала, используя
set _Temp_Msg_Cmd=
- команда сбежала перенаправление с использованием символа моркови
^
, чтобы команды не оценивались изначально
- Временный файл создается с именем файла, аналогичным запускаемому пакетному файлу, и называется
%~n0_temp.txt
, который использует синтаксис расширения параметра командной строки %~n0
для получения имени пакетного файла.
- Вывод добавляется в отдельный файл журнала
%~n0_log.txt
Вот последовательность команд:
- Вывод и сообщения об ошибках отправляются во временный файл
^> %~n0_temp.txt 2^>^&1
- В этом случае содержимое временного файла:
- добавлено в файл журнала
^& type %~n0_temp.txt ^>^> %~n0_log.txt
- вывод в командное окно
^& type %~n0_temp.txt
- Временный файл с сообщением удален
^& del /Q /F %~n0_temp.txt
Вот пример:
set _Temp_Msg_Cmd= ^> %~n0_temp.txt 2^>^&1 ^& type %~n0_temp.txt ^>^> %~n0_log.txt ^& type %~n0_temp.txt ^& del /Q /F %~n0_temp.txt
Таким образом, команда может быть просто добавлена после более поздних команд в командный файл, который выглядит намного чище:
echo test message %_Temp_Msg_Cmd%
Это можно добавить и в конец других команд. Насколько я могу сказать, это будет работать, когда сообщения имеют несколько строк. Например, следующая команда выводит две строки, если появляется сообщение об ошибке:
net use M: /D /Y %_Temp_Msg_Cmd%