Как вывести результат выполнения команды в файл в Windows
При выполнении каких-либо команд в командной строке или PowerShell результат их выполнения отображается прямо в консоли: это удобно, но иногда требуется вывести сохранить эти результаты в файл для дальнейшей работы или анализа.
В этой инструкции подробно о том, как выводить результаты выполнения команд Windows не только в окне консоли, но и в текстовый файл на диске. На близкую тему: Способы создания текстового файла в командной строке и PowerShell.
Командная строка
Для команд командной строки возможны несколько способов вывода результатов в файл. Сама команда может быть любой, но в зависимости от того, какой из подходов вы будете использовать, результат будет отличаться.
Вывести результат выполнения команды командной строки в текстовый файл можно следующими способами:
- Первый вариант — простой вывод в файл. При этом если файл уже существует, он будет перезаписан, а в окне консоли вывод команды не отобразится:
команда > путь_к_файлу
Пример вы можете увидеть на скриншоте ниже. - Второй метод не затирает предыдущее содержимое файла, если оно уже есть, а добавляет вывод команды к уже имеющемуся в файле содержимому. Как и в предыдущем случае в окне консоли результат отображаться не будет:
команда >> путь_к_файлу
Например, для команд приведенных на скриншоте, результат будет записан в файл дважды. - Если требуется вывод в файл с одновременным выводом в окне командной строки, можно использовать следующий подход:
команда >> путь_к_файлу | type путь_к_файлу
В последнем случае вывод команды будет сохранен в файл, а затем уже содержимое сохраненного файла отображено в окне консоли.
Windows PowerShell
Если команды выполняются в PowerShell, вы можете использовать команду Tee-Object следующими способами:
- Вывод результатов команды в текстовый файл и консоль с перезаписыванием данных в файле:
команда | tee путь_к_файлу
- Вывод результатов команды в файл с добавлением вывода к имеющемуся содержимому файла:
команда | tee -append путь_к_файлу
- Если нужно вывести в файл результаты выполнения ряда команд, включая сообщения об ошибках, вы можете использовать следующих подход:
Start-Transcript -Path "путь_к_файлу" ваши команды Stop-Transcript
В части PowerShell приведены лишь базовые варианты, в действительности возможностей вывода нужных данных при выполнении команд в файл в этом языке присутствует больше. Но, надеюсь, для большинства моих читателей приведённых сведений будет достаточно для их задач.
victor
1)Powershell
Зачем какой-то tee, если есть очень простой оператор >,>>?
ping 8.8.8.8 >> f:\debug.txt
2)Для cmd.exe есть вывод команд через doskey
doskey /history > f:\debug.txt
3)Зачем нужен Start-Transcript,если можно по-другому:
@(ping 8.8.8.8;$PSVersionTable.PSVersion;get-executionpolicy -l) >> f:\debug.txt
Ответить
Sentaro
Автор! Давая подобные советы, нелишним будет уточнить, для какой «командной строки», какого приложения действуют подобные советы.
Для оболочки командной строки cmd.exe, кроме потока StdOUT, перенаправление которого вы описали, есть ещё поток StdERR, тема которого совсем не раскрыта, а ведь некоторые консольные приложения, например, wget, на него даже справку об использовании отправляют.
Поэтому предлагаю вам расширить свои познания в области pipes cmd.exe и дополнить статью необходимой информацией.
Кстати, «Если требуется вывод в файл с одновременным выводом в окне командной строки», то чтобы успевать отслеживать экранный вывод, будет эффективнее использовать следующий подход:
команда >> путь_к_файлу | more путь_к_файлу
Пейджер more ещё со времён [MS]DOS жалкая пародия на UNIX оригинал, поэтому, тем кому важен функционал, неплохим вариантом будет использование стороннего пейджера less, например.
Ответить
Frost MRT
команда >> путь_к_файлу | more путь_к_файлу
А если у меня допустим команда выглядит следующим образом «Call имя_файла.bat > новый_файл_01.log | more новый_файл_01.log»
В итоге создается «новый_файл_01.log» в него записывается содержимое из батника который я вызвал через call, но содержимое файла «новый_файл_01.log» не выводится обратно в консоль командой more.
Вопрос почему команда more не выводит в консоль содержимое файла «новый_файл_01.log», хотя файл не пустой и по мере работы бат файла заполняется в реальном времени?
Ответить
Роман
А как вывести в лог файл не только выполненные команды, но и ошибки выполнения команд в режиме до записи в файл?
Часто встречаю команду 2>&1 которая не работает
Ответить
Роман
Как в итоге записать поток дескриптора 1 и 2 в файл?
например команда:
copy c:\text1.txt d:\text1.txt 1>> c:\log.log — Дозаписывает удачное выполнение команд
copy c:\text1.txt d:\text1.txt 2>> c:\log.log — Дозаписывает ошибки выполнение команд
А как Дозаписывать И 1 и 2 в один и тот же файл ???
Ответить