У меня есть пакетный скрипт, который выполняет задачу и отправляет вывод в текстовый файл. Есть ли способ отобразить вывод в окне консоли?
Например:
c:\Windows>dir > windows-dir.txt
Есть ли способ получить вывод dir
отображения в окне консоли, а также поместить его в текстовый файл?
windows
batch-file
cmd
JamesEggers
источник
источник
Ответы:
Нет, вы не можете с чистым перенаправлением.
Но с некоторыми трюками (например, tee.bat ) вы можете.
Я пытаюсь объяснить перенаправление немного.
Вы перенаправляете один из десяти потоков с помощью > file или <file.
Это неважно, если перенаправление происходит до или после команды, поэтому эти две строки почти одинаковы.
Перенаправление в этом примере является только ярлыком для 1> , это означает, что поток 1 (STDOUT) будет перенаправлен.
Таким образом, вы можете перенаправить любой поток, добавив перед ним число, например 2> err.txt, и также можно перенаправить несколько потоков в одну строку.
В этом примере «стандартный вывод» будет помещен в файл files.txt, все ошибки будут в файле err.txt, а stream3 - в none.txt (DIR не использует поток 3).
Stream0 - STDIN
Stream1 - STDOUT
Stream2 - STDERR
Stream3-9 не используются
Но что произойдет, если вы попытаетесь перенаправить один и тот же поток несколько раз?
«Может быть только один», и он всегда последний!
Так что он равен dir> two.txt
Хорошо, есть одна дополнительная возможность, перенаправление потока в другой поток.
2> & 1 перенаправляет stream2 в stream1, а 1> files.txt перенаправляет все в files.txt .
Порядок важен здесь!
разные. Первая перенаправляет все (STDOUT и STDERR) в NUL,
но вторая строка перенаправляет STDOUT в NUL и STDERR в «пустой» STDOUT.
В качестве одного из выводов очевидно, что примеры Otávio Décio и andynormancx не работают.
Оба пытаются перенаправить stream1 два раза, но «может быть только один», и это всегда последний.
Итак, вы получаете
И в первом примере перенаправление stream1 на stream1 не разрешено (и не очень полезно).
Надеюсь, поможет.
источник
3<&2
(обратите внимание на LT вместо GT), а затем3>errors.txt
. Но это плохо кончилось - весь последующий вывод stderr был записанerrors.txt
(то есть - из других команд!).for /f "delims=" %%v in ('dir') do echo %%v>>file.txt
хотя.Просто используйте версию для Windows UNIX tee (находится по адресу http://unxutils.sourceforge.net ) следующим образом:
Если вам также нужен выход STDERR, используйте следующее. Сочетает в себе выход STDERR в STDOUT (первичный поток).
2>&1
источник
1>tee a.txt
перенаправит стандартный вывод в файл с именемtee
вместо вызоваtee
команды. Кто-нибудь может подтвердить, что этот ответ работает для них?Если вам не нужен вывод в режиме реального времени (то есть, когда программа его пишет), вы можете добавить
после этой строки.
источник
dir > windows-dir.txt & type windows-dir.txt
. Это также относится и к блокам:( echo %date% <NL> echo %username% <NL> echo %time% <NL> pause>CON )>test.txt & type test.txt
. Однако, если выход требуется в режиме реального времени, вы можете использовать , например , через окно порт тройника инструмента , который ...Решение, которое работало для меня, было: dir> a.txt | введите a.txt .
источник
Да, есть способ показать вывод одной команды на консоли (экране) и в файле. Используя ваш пример, используйте ...
Детальное объяснение:
Команда
FOR
анализирует вывод команды или текста в переменную, на которую можно ссылаться несколько раз.Для такой команды, как
DIR /B
, заключите в одинарные кавычки, как показано в примере ниже. ЗаменитеDIR /B
текст желаемой командой.Для отображения текста заключите текст в двойные кавычки, как показано в примере ниже.
... и с переносом строк ...
Если у вас есть моменты, когда вы хотите, чтобы вывод выводился только на консоли (экран), и другие разы, отправленные только в файл, и другие разы, отправляемые в оба, укажите условие «DO» цикла FOR, используя переменную, как показано ниже с помощью
%TOECHOWHERE%
.источник
delims=
вместо этого.источник
Если вы хотите добавить вместо замены выходной файл, вы можете использовать
или
источник
Мой вариант был такой:
Создайте подпрограмму, которая принимает сообщение и автоматизирует процесс отправки его как в консоль, так и в файл журнала.
Если вы добавляете переменную к сообщению, обязательно удалите кавычки в нем, прежде чем отправить его в подпрограмму, иначе он может испортить вашу партию. Конечно, это работает только для эха.
источник
setlocal enabledelayedexpansion
вместо простоsetlocal
2) Я использую отложенное расширение для переменной logfile,>> !logfile!
а не>> %logfile%
внутри подпрограммы. Таким образом, он работает, когда вызывается из блока кода (как внутри оператора if). 3) Я удалил строку «set message», потому что нет необходимости в дополнительной переменной. У нас уже есть,$~1
так что я имеюecho $~1
для обеих команд эха.Я сделал простую консоль C #, которая может обрабатывать вывод в режиме реального времени на экран cmd и журнал
Использование командного файла такое же, как использование Unix
tee
А вот репозиторий, в который входит Tee.exe, если у вас нет инструмента для компиляции https://github.com/iamshiao/Tee
источник
Мне нравится ответ atn, но его загрузка была не такой тривиальной, как wintee , которая также имеет открытый исходный код и дает только функциональность tee (полезно, если вы просто хотите использовать tee, а не весь набор утилит unix). Я узнал об этом из ответа Давора на Отображение вывода командной строки Windows и перенаправление его в файл , где вы также найдете ссылку на утилиты Unix.
источник
Решение, предоставленное «Tomas R», идеально подходит для вопроса ОП и доступно изначально.
Попробуйте: chkdsk c:> output.txt | введите output.txt
Вывод этой команды включает в себя процент выполнения, который последовательно выводится в файл, следовательно, он будет выглядеть немного грязно (т.е. текст будет добавляться по мере продвижения). Это не происходит с битами, которые выводятся на STDOUT (экран). Так будет, если вы просто выполните ту же команду без перенаправления.
источник
Я думаю, что вы хотите что-то вроде этого:
Или, если вы хотите новую строку:
Эти команды отлично подходят для журналов.
Примечание. Это иногда приводит к сбоям и замене всего текстового файла на моем компьютере.
Другое примечание: если файл не существует, он создаст файл.
источник
>
это предназначено для перезаписи файла использование.>>
Для добавления )