В своем вопросе вы упоминаете:
«... он поместит вывод в файл, но на самом деле не выполнит его. В моем случае мне нужно будет выполнить его, а затем войти в файл для дальнейшего использования».
Поскольку вы говорите, что программа работает и ее вывод помещается в файл, я подумал, что вы могли иметь в виду «отображаемый» , а не «выполненный» .
Если это не то, что вы имели в виду, то, возможно, это помогло бы, если бы это было объяснено лучше, возможно, с некоторым примером вывода.
В любом случае, я публикую этот ответ, если есть другие, которые считают этот вопрос / ответ полезным.
Таким образом, в основном это звучит так, как будто вы хотите, чтобы выходные данные сценария были записаны в файл, а также чтобы вы могли видеть выходные данные сценария на экране во время выполнения сценария.
(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