- Использование операторов перенаправления команд
- Перенаправление ввода команд ( )
- Использование оператора « search.txt 2 &» для перенаправления ввода и дублирования
- Использование оператора «>>» для добавления вывода
- Использование оператора канала (|)
- Комбинирование команд с операторами перенаправления
- Перенаправление стандартных ввода-вывода и ошибок
- Перенаправление вывода в Batch file
- 10 ответов
- Похожие вопросы:
- Вывод в консоль и в файл одновременно
Использование операторов перенаправления команд
Операторы перенаправления команд используются для изменения местоположений потоков ввода и вывода команд, заданных по умолчанию, на какие-либо другие. Местоположение потоков ввода и вывода называется дескриптор.
В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.
Оператор перенаправления | Описание |
---|---|
> | Записывает данные на выходе команды вместо командной строки в файл или на устройство, например, на принтер. |
> | Добавляет выходные данные команды в конец файла, не удаляя при этом существующей информации из файла. |
>& | Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора. |
» будет единица (1). После ввода оператора « » необходимо указать, откуда читать и куда записывать данные. Можно задать имя файла или любой из существующих дескрипторов. Для задания перенаправления в существующие дескрипторы используется амперсанд (&), затем номер требуемого дескриптора (например, &номер_дескриптора). Например, для перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите: При дублировании дескриптора происходит копирование всех его исходных характеристик. Например, если дескриптор доступен только для записи, то все его дубликаты будут доступны только для записи. Нельзя продублировать дескриптор с доступом только для чтения в дескриптор с доступом только для записи. Перенаправление ввода команд ( )Выходные данные практически всех команд высвечиваются в окне командной строки. Даже команды, выводящие данные на диск или принтер, выдают сообщения и запросы в окне командной строки. Для перенаправления вывода команд из окна командной строки в файл или на устройство применяется оператор «>». Этот оператор используется с большинством команд. Например, для перенаправления вывода команды dir в файл Dirlist.txt введите: Если файл Dirlist.txt не существует, интерпретатор команд Cmd.exe создаст его. Если файл существует, Cmd.exe заменит информацию в файле на данные, полученные от команды dir. Для запуска команды netsh routing dump и последующей отправки результатов ее работы в Route.cfg введите: Оператор «>» открывает заданный файл с доступом только для записи. Поэтому с помощью данного оператора файл прочитать нельзя. Например, при запуске программы с оператором перенаправления ». Использование оператора « search.txt 2 &» для перенаправления ввода и дублированияПри перенаправлении вывода в файл и задании существующего имени файла интерпретатор команд Cmd.exe открывает файл с доступом только для записи и переписывает его содержимое. Если дескриптор задан, интерпретатор команд Cmd.exe дублирует файл в существующий дескриптор. Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите: Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (STDERR), команды ipconfig в дескриптор 1 (STDOUT) и последующего перенаправления выходных данных в Output.log введите: Использование оператора «>>» для добавления выводаДля добавления выходных данных команды в конец файла без потери хранящейся в нем информации используется двойной символ «больше» (>>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл Dirlist.txt: Для добавления выходных данных команды netstat в конец файла Tcpinfo.txt введите: Иногда удобнее записывать это следующим образом: n0.html» > %OutFile% ECHO ^ >> %OutFile% ECHO ^ >> %OutFile% ECHO ^ best page^ >> %OutFile% ECHO ^ >> %OutFile% ECHO ^ >> %OutFile% ECHO Hello World >> %OutFile% ECHO ^ >> %OutFile% ECHO ^ Использование оператора канала (|)Оператор канала «вертикальная линия» (|) забирает выходные данные одной команды (по умолчанию STDOUT) и направляет их на вход другой команды (по умолчанию STDIN). Например, следующая команда сортирует каталог: В данном примере обе команды запускаются одновременно, но команда sort приостанавливает работу до получения выходных данных команды dir. Команда sort использует выходные данные команды dir в качестве своих входных данных, а затем свои выходные данные отправляет в дескриптор 1 (STDOUT). Комбинирование команд с операторами перенаправленияКомбинируя команды-фильтры с другими командами и именами файлов, можно создавать команды на заказ. Например, для сохранения имен файлов, содержащих строку «LOG», используется следующая команда: Выход команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле Loglist.txt в виде списка (например, NetshConfig.log, Logdat.svd и Mylog.bat). При использовании более одного фильтра в одной команде их необходимо отделять с помощью канала (|). Например, следующая команда ищет в каждом каталоге диска C файлы, в названии которых присутствует строка «Log», и выводит их постранично на экран: Наличие канала (|) указывает cmd.exe, что выход команды DIR нужно отправить команде-фильтру find. Команда find выбирает только те имена файлов, в которых содержится строка «LOG». Команда more выводит на экран имена файлов, полученные командой find с паузой после заполнения каждого экрана. Дополнительные сведения о командах-фильтрах смотри в разделе Использование фильтров. Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация). Перенаправление стандартных ввода-вывода и ошибокС помощью переназначения устройств ввода/вывода одна программа может направить свой вывод на вход другой или перехватить вывод другой программы, используя его в качестве своих входных данных. Таким образом, имеется возможность передавать информацию от процесса к процессу при минимальных программных издержках. Практически это означает, что для программ, которые используют стандартные входные и выходные устройства, операционная система позволяет:
Из командной строки эти возможности реализуются следующим образом. Для того, чтобы перенаправить текстовые сообщения, выводимые какой-либо командой из командной строки, в текстовый файл, нужно использовать конструкцию команда > имя_файла. Если при этом заданный для вывода файл уже существовал, то он перезаписывается (старое содержимое теряется), если не существовал создается. Можно также не создавать файл заново, а дописывать информацию, выводимую командой, в конец существующего файла. Для этого команда перенаправления вывода должна быть задана так: команда >> имя_файла. С помощью символа ping.txt 2. Добавление текста справки для команды XCOPY в файл copy.txt: XCOPY /? >> copy.txt В случае необходимости сообщения об ошибках (стандартный поток ошибок) можно перенаправить в текстовый файл с помощью конструкции команда 2> имя_файла В этом случае стандартный вывод будет производиться на экран. Также имеется возможность информационные сообщения и сообщения об ошибках выводить в один и тот же файл. Делается это следующим образом: команда > имя_файла 2>&1 Перенаправление вывода в Batch fileЯ создаю batch file с некоторыми простыми командами для сбора информации из системы. batch file содержит команды для получения времени, IP информации, пользователей и т. д. Я собрал все команды в batch file, и он работает, но я хотел бы, чтобы batch file при запуске выводил результаты в текстовый файл (журнал). Есть ли команда, которую я могу добавить в пакет, чтобы сделать это? Имейте в виду, что я не хочу запускать пакет из cmd, а затем перенаправлять вывод ; я хочу перенаправить вывод изнутри пакета, если это возможно. 10 ответовУ меня есть batch file, который выполняет ряд команд. Когда каждый из них выполняется, он возвращает сообщение success или fail. Его достаточно просто перенаправить вывод из каждого из них с помощью >> и отправить его в файл, но без соответствующей команды вывод бесполезен. (Batch File) Command. Я искал повсюду, но все предложения и советы, которые я нашел, почему-то не работают. У меня есть batch file, который вызывается как таковой: cmd /C automateMyProgram.bat >> automation.log 2>>&1 Это отлично работает: automation.log загружается со всеми stdout и stderr для этого. Простой наивный способ, который работает медленно, потому что он открывает и позиционирует указатель файла на End-Of-File несколько раз. Лучший способ-проще писать и быстрее, потому что файл открывается и позиционируется только один раз. Еще один хороший и быстрый способ, который открывает и позиционирует файл только один раз Редактировать 2020-04-17 Время от времени вам может потребоваться многократная запись в два или более файлов. Вы также можете захотеть, чтобы на экране появлялись разные сообщения. Это все еще можно сделать эффективно, перенаправив на неопределенные дескрипторы вне заключенного в скобки блока или подпрограммы, а затем используя нотацию & для ссылки на уже открытые файлы. Я решил использовать дескрипторы 9 и 8 в обратном порядке, потому что таким образом с большей вероятностью можно избежать потенциального постоянного перенаправления из-за ошибки в дизайне реализации перенаправления Microsoft при выполнении нескольких перенаправлений одной и той же команды. Это крайне маловероятно, но даже такой подход может выявить ошибку, если вы достаточно постараетесь. Если вы организуете перенаправление, то гарантированно избежите этой проблемы. если вы хотите перенаправить потоки out и err Я знаю, что это более старый пост, но кто-то наткнется на него в поиске Google, и это также выглядит так, как будто некоторые вопросы, заданные OP в комментариях, не были специально адресованы. Кроме того, пожалуйста, полегче со мной, так как это мой первый ответ, опубликованный на SO. 🙂 Чтобы перенаправить вывод в файл с помощью динамически генерируемого имени файла, мой подход go-to (читай: быстрый & грязный) является вторым решением, предлагаемым @dbenham., так что, например, это: Будет создан файл, подобный тому, что вы видите на этом скриншоте файла в целевом каталоге Это будет содержать этот вывод: Также имейте в виду, что это решение зависит от locale, поэтому будьте осторожны, как/когда вы его используете. Если у нас есть batch file, перенаправляемый в журнал вот так: C:\Testing\Example.bat > C:\Testing\Example.log Есть ли какой-нибудь способ внутри batch file определить, происходит ли стандартное перенаправление вывода в файл журнала? В основном batch file, который у меня есть, требует передачи. Допустим, в a batch file я хочу выполнить myCommand асинхронно (не дожидаясь его завершения). И я не хочу выполнять myCommand в новом окне консоли. В то же время я хочу перенаправить вывод myCommand на output.txt Так что в batch file году, если я напишу START myCommand > output.txt output.txt. должен заполнить счет. Если вы хотите APPEND вывода, используйте >> вместо > . > запустит новый файл журнала. Есть классная маленькая программа, которую вы можете использовать для перенаправления вывода в файл и консоль Добавьте эти две строки в верхней части вашего batch file, все stdout и stderr после этого будут перенаправлены на log.txt: Я использовал приведенную выше команду в своем batch file, и она работает. В лог-файле он показывает результаты моей команды. Это может привести к сбою в случае «toxic» символов во входных данных. Рассмотрение ввода типа thisIsAnIn^^^ ^ put-это хороший способ понять, что происходит. Конечно, существует правило, что входная строка MUST должна находиться внутри двойных кавычек, но у меня есть ощущение, что это правило является допустимым правилом только в том случае, если значение входных данных находится в разделе NTFS (возможно, это правило для URLs, я не уверен). Но это, конечно, не правило для произвольной входной строки (это «a good practice», но вы не можете считать с ней). Добавление следующих строк в нижней части вашего batch file захватит все так же, как показано в окне CMD, и экспортирует в текстовый файл: Он в основном выполняет выбрать все -> скопировать в буфер обмена -> вставить в текстовый файл . Похожие вопросы:Мне нужно вывести некоторые данные параметров из batch file. Я могу перенаправить вывод, никаких проблем. Моя проблема заключается в том, что мне нужно сделать что-то вроде set value1=0 set value2=1. Windows XP My batch file запускает команду, которая имеет несколько строк вывода. Как я могу count (и хранить в переменной) строки вывода, никогда не записывая их на диск? У меня есть batch file, который вызывает мой IDE, поэтому я просто хочу знать, можем ли мы извлечь содержимое, присутствующее в моем IDE(все содержимое), в некоторые текстовые файлы. Мой batch file. У меня есть batch file, который выполняет ряд команд. Когда каждый из них выполняется, он возвращает сообщение success или fail. Его достаточно просто перенаправить вывод из каждого из них с помощью. Я искал повсюду, но все предложения и советы, которые я нашел, почему-то не работают. У меня есть batch file, который вызывается как таковой: cmd /C automateMyProgram.bat >> automation.log. Если у нас есть batch file, перенаправляемый в журнал вот так: C:\Testing\Example.bat > C:\Testing\Example.log Есть ли какой-нибудь способ внутри batch file определить, происходит ли стандартное. Допустим, в a batch file я хочу выполнить myCommand асинхронно (не дожидаясь его завершения). И я не хочу выполнять myCommand в новом окне консоли. В то же время я хочу перенаправить вывод myCommand. Я пытаюсь сделать PowerShell PSObject из вывода batch file. Я вызываю batch file вот так, что дает мне объект, содержащий выходные данные batch file: function browseGateway < &. Я хочу создать утилиту batch file, которая будет потребляться клиентом batch file. Утилита batch file создаст результат & перенаправит в качестве вывода. Клиент batch file вызовет utility.bat. У меня есть веб-приложение, которое выполняет batch file. Этот batch file выполняет класс java, выходные данные которого отображаются в командном окне, в котором выполнялся batch file. batch file. Вывод в консоль и в файл одновременноесть некоторая произвольная иерархия каталогов. внутри которой на разных уровнях могут встречаться смысл батника: запустить сборку проекта, при этом батник реализует идеому «закрыт для изменений». поэтому, при создании новой цели проекта, кроме того, есть потребность логгировать ход сборки: пример кода такого батника: этот батник неплохо себя зарекомендовал. но тут возникла необходимость рекурсивно обойти всю иерархию каталогов, проблема вот в этих строках: для того, что бы перенаправить выхлоп сборки в файл и в консоль одновременно, в результате только один из make.bat успешно отработает. задача сводится к тому, что бы избавиться от: но при этом сохранить возможность перенаправить вывод в консоль и в файл. пытался сделать что-то типа такого: но это не работает. как можно порешать проблему? |