Записать весь вывод командного файла

11

Я использую скрипт командной строки для настройки нескольких параметров на компьютере. Тем не менее, я хотел бы, чтобы весь вывод был также зарегистрирован в файле .txt или .log.

Когда я использую свои базовые знания о системе ведения журналов, она помещает вывод в файл, но фактически не выполняет его. В моем случае мне нужно было бы выполнить его, а затем войти в файл для дальнейшего использования.

Кто-нибудь сможет сказать мне, как это сделать?

Заранее спасибо! Dempsey

Dempsey FoxDie Van Assche
источник
Вы даже не указали операционную систему!
Майкл Хэмптон

Ответы:

10

Если вопрос требует, чтобы скрипт был «выполнен» и весь пакетный файл был выведен в файл журнала в Windows 8.1, то вот простой ответ:

Включите это в начало вашего пакетного файла ...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]
Ingrid
источник
Отлично, спасибо! (Конечно,% LOGFILE% здесь на самом деле не нужен.: P)
Эндрю
1
Мой сценарий ставит вопрос - я не вижу его, если это используется. Как все записать и увидеть на экране во время выполнения?
Симон
Да, как бы вы сделали это, чтобы вы могли видеть это, пока оно на вашем экране?
Карл-полиция
3

В своем вопросе вы упоминаете:

«... он поместит вывод в файл, но на самом деле не выполнит его. В моем случае мне нужно будет выполнить его, а затем войти в файл для дальнейшего использования».

Поскольку вы говорите, что программа работает и ее вывод помещается в файл, я подумал, что вы могли иметь в виду «отображаемый» , а не «выполненный» .

Если это не то, что вы имели в виду, то, возможно, это помогло бы, если бы это было объяснено лучше, возможно, с некоторым примером вывода.

В любом случае, я публикую этот ответ, если есть другие, которые считают этот вопрос / ответ полезным.

Таким образом, в основном это звучит так, как будто вы хотите, чтобы выходные данные сценария были записаны в файл, а также чтобы вы могли видеть выходные данные сценария на экране во время выполнения сценария.

(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
Кевин Феган
источник
0

Этот скрипт выполнит ls и запишет его вывод в файл с именем log.txt:

exec >log.txt 2>&1
ls

Журнал не будет выполнен.

Торстен Стэрк
источник
1
Обратите внимание, что это предполагает Unix / Linux, но я предполагаю, что OP говорит о Windows. Он также не запускает сценарий, а регистрирует вывод введенных вами команд и пропускает важную информацию о том, как остановить безумие ...
Свен
Я действительно говорю о Windows. Спасибо, хотя :)
Демпси FoxDie Van Assche