В своем вопросе вы упоминаете:
msgstr "... он поместит вывод в файл, но не выполнит его. В моем случае мне нужно было выполнить его, а затем войти в файл для дальнейшего использования. "
Поскольку вы говорите, что программа работает, а ее вывод помещается в файл, я подумал, что вы могли иметь в виду "отображаемый", а не "выполненный".
Если это не то, что вы имели в виду, то, возможно, это помогло бы, если бы это было объяснено лучше, возможно, с некоторым примером вывода.
В любом случае, я публикую этот ответ, если есть другие, которые считают этот вопрос / ответ полезным.
Таким образом, в основном это звучит так, как будто вы хотите, чтобы выходные данные сценария были записаны в файл, а также чтобы вы могли видеть выходные данные сценария на экране во время его выполнения.
(tl; dr версия: используйте wintee, вот так:
script 2>&1 | wtee logfile.txt
)
В этом посте я буду использовать небольшой тестовый пакетный файл, но ваш скрипт может быть настолько большим и сложным или настолько простым, насколько вам нужно:
C:\>type a.cmd
@echo off
echo Command: "dir /b a*"
dir /b a*
echo.
echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.
Вот что происходит, когда я запускаю этот пакетный скрипт:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Обратите внимание, что в тестовом сценарии первое выполнение команды "dir" прошло успешно, а второе - не удалось. Я делаю это только для того, чтобы показать, что произойдет с "сообщениями об ошибках" при запуске скрипта.
Если я запущу скрипт и использую перенаправление (">") для захвата вывода, я увижу это
C:\>a.cmd > log.txt
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
C:\>
Обратите внимание, что сообщение об ошибке "Файл не найден" отображалось на экране при запуске сценария и фактически не было записано в файл. Это потому, что «>» захватывает "нормальный вывод", который был отправлен в поток STDOUT. "Сообщения об ошибках" обычно отправляются в поток STDERR.
Чтобы захватить "нормальный вывод" и "сообщения об ошибках", вам также нужно захватить поток STDERR, который обозначен "2" в «2> & 1» в команде здесь:
C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
В unix есть стандартная команда: "tee"
Используя команду "tee", вы можете захватывать выходные данные из программы, а также одновременно отображать выходные данные на экране.
Команда "tee" не является стандартной для Windows, но вы можете скачать бесплатную версию "tee" для Windows здесь: wintee. Скачанная программа называется: "wtee.exe"
.
Вы используете программу "wtee.exe", как показано ниже.
Это будет захватывать вывод скрипта в файл с именем "log.txt"
как и раньше, а также отображать вывод на экран во время работы скрипта:
C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found