конвейер в командной строке windows

Конвейеризация команд Windows

Технические науки

Похожие материалы

Конвейер команд

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

Рассмотрим выдачу, полученную командой dir для корневого директория диска СЛ.

Надо отметить, что этот директорий очень напряжённый и насыщенный. Чаще всего он по команде dir не умещается в окне консоли команд.

Здесь приведен лишь фрагмент вывода по команде dir. Обратим внимание, что кроме огромного перечня файлов и папок команда dir даёт и сводные результаты: в директории хранится 9 файлов общим объёмом 622 331 байт, и 29 папок.

При этом на диске, в корневой директорий которого мы заглядывали, свободно 254 394 368 байт.

Это значит, что команда dir даёт достаточное количество информации, чтобы ответить на такие вопросы:

Но чтобы получить ответы на эти вопросы, надо переворошить груду информации и найти в ней то, что Вас интересует.

Ответ должен быть коротким, понятным и информативным.

Чтобы удовлетворить этим требованиям, одной команды dir недостаточно.

Возможности этой (и других команд) можно расширить с помощью конвейера.

Вспомним, что есть ещё такая команда find, по которой можно среди большого количества строк найти ту, которая больше всего интересует.

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

Построим конвейер из двух команд: dir и find.

Такое сочетание команд в конвейере позволяет ответить на вопрос:

«Сколько файлов хранится в данной директории и каков их объём?».

Выполним в консоли команд:

Здесь для команды find в кавычках мы указали поисковое предписание: что искать? А если вместо слова «файлов» указать слово «байт»?

Получили то же самое.

Внутри одной строки программа find неспособна разделить информацию.

Использование конвейера команд

Сколько файлов хранится в данной директории и каков их объём?

Для ответа на вопрос, заданный в заголовке, составим запрос:

Для этой цели можно воспользоваться и другой программой: findstr.

Какие текстовые файлы хранятся в этом директории?

Для ответа на этот вопрос составим запрос:

В директории найдено два файла с расширением txt.

Завершение формирования электронного архива по направлению «Науки о Земле и энергетика»

Создание электронного архива по направлению «Науки о Земле и энергетика»

Электронное периодическое издание зарегистрировано в Федеральной службе по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор), свидетельство о регистрации СМИ — ЭЛ № ФС77-41429 от 23.07.2010 г.

Соучредители СМИ: Долганов А.А., Майоров Е.В.

Источник

Тонкости работы в командной строке Windows

Горячие клавиши

Начнем с горячих клавиш, ведь сначала необходимо изучить, что нам может дать рабочая среда.

F1 — В консоли эта клавиша работает в точности как и стрелка вправо, т.е. выводит по одному символу из последней введенной (либо выбранной в истории) команды.
F2 + — Выводит последнюю введенную команду до указанного символа. Например, если последняя введенная вами команда выглядела вот так:

то после нажатия комбинации клавиш F2 + 5 вы получите:

F3 — Выводит последнюю, и только последнюю, в истории команду целиком.
F5 — Выводит последние введенные команды по порядку, также как и стрелка вверх.
F6 — Вставляет символ EOF на текущую позицию командной строки, что аналогично нажатию комбинации Ctrl + Z.
F7 — Диалоговое окно, содержащее историю команд.

Alt + F7 — Очищает историю команд.
+ F8 — Перебирает команды, которые начинаются с символов уже введенных в командную строку.
Если перед нажатием F8 ничего не вводить, то эта клавиша будет работать как и стрелка вверх, но с небольшим отличием — перебор строк будет осуществляться циклично, т.е. после первой команды из списка будет выведена последняя.
F9 + — Вставляет команду из истории под соответствующим номером. К примеру, в ситуации приведенной на скрине выше при нажатии комбинации F9 + 4 в консоли появится:

Операторы командной строки

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

Оператором конвейера в *nix и cmd, является символ вертикальной черты.

Например, вывод всех текстовых файлов в текущей папке покажет команда

Оператор объединения команд

Пример: Команда1 & Команда2 – сначала выполнятся Команда1, а уже потом Команда2

Оператор И

Пример: Команда1 && Команда2 — Команда2 будет выполняться только в том случае, если произошло успешное выполнение Команды1

Оператор ИЛИ

Пример: Команда1 || Команда2 — Команда2 будет выполняться только в том случае, если Команда1 не смогла выполниться.

Спасибо за внимание! Жду критики и предложений…

Для тех, кто не в теме, циркумфлекс(вот этот знак «^») означает нажатие клавиши с Ctrl (^C = Ctrl +C ).

Источник

about_Pipelines

Краткое описание

Объединение команд в конвейеры в PowerShell

Подробное описание

Конвейер — это серия команд, Соединенных операторами конвейера ( | ) (ASCII 124). Каждый оператор конвейера отправляет результаты предыдущей команды следующей команде.

В конвейере команды обрабатываются в порядке слева направо. Обработка обрабатывается как одна операция, а выходные данные отображаются по мере их создания.

Вот простой пример. следующая команда возвращает Блокнот процесс, а затем останавливает его.

первая команда использует Get-Process командлет для получения объекта, представляющего процесс Блокнот. он использует оператор конвейера ( | ) для отправки объекта process в Stop-Process командлет, который останавливает процесс Блокнот. Обратите внимание, что у Stop-Process команды нет параметра Name или ID для указания процесса, так как указанный процесс отправляется через конвейер.

Этот пример конвейера получает текстовые файлы в текущем каталоге, выбирает только те файлы, которые имеют длину более 10 000 байт, сортирует их по длине и отображает имя и длину каждого файла в таблице.

Этот конвейер состоит из четырех команд в указанном порядке. На следующем рисунке показаны выходные данные каждой команды, которые передаются в следующую команду конвейера.

Использование конвейеров

Большинство командлетов PowerShell предназначены для поддержки конвейеров. В большинстве случаев можно передать результаты командлета Get в другой командлет того же существительного. Например, выходные данные командлета можно передать в Get-Service Start-Service Stop-Service командлеты или.

Этот пример конвейера запускает службу WMI на компьютере:

Другой пример: можно передать выходные данные Get-Item Get-ChildItem поставщика реестра PowerShell в New-ItemProperty командлет. В этом примере в раздел реестра MyCompany добавляется новая запись реестра NoOfEmployees со значением 8124.

Многие командлеты служебной программы, такие как. Get-Member Where-Object и, Sort-Object Group-Object Measure-Object используются практически исключительно в конвейерах. К этим командлетам можно передать любой тип объекта. В этом примере показано, как сортировать все процессы на компьютере по количеству открытых дескрипторов в каждом процессе.

В этом примере показано, как использовать Format-List командлет для отображения списка свойств объекта процесса.

Кроме того, выходные данные собственных команд можно передать в командлеты PowerShell. Пример:

Потоки успехов и ошибок похожи на потоки stdin и stderr других оболочек. Однако stdin не подключен к конвейеру PowerShell для ввода данных. Дополнительные сведения см. в разделе about_Redirection.

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

Принцип работы конвейеров

В этом разделе объясняется, как входные объекты привязаны к параметрам командлета и обрабатываются во время выполнения конвейера.

Принимает входные данные конвейера

Например, чтобы определить, какой из параметров Start-Service командлета принимает входные данные конвейера, введите:

Справка по Start-Service командлету показывает, что только параметры InputObject и Name принимают входные данные конвейера.

Методы приема входных данных конвейера

Параметры командлетов могут принимать входные данные конвейера одним из двух способов:

Например, параметр Name Start-Service принимает входные данные конвейера по значению. Он может принимать строковые объекты или объекты, которые могут быть преобразованы в строки.

Бипропертинаме: параметр принимает входные данные только в том случае, если входной объект имеет свойство с тем же именем, что и параметр.

Некоторые параметры могут принимать объекты по значению или имени свойства, что упрощает получение входных данных из конвейера.

Привязка параметра

При передаче объектов из одной команды в другую команда PowerShell пытается связать переданный объект с параметром командлета получения.

Компонент привязки параметров PowerShell связывает входные объекты с параметрами командлета в соответствии со следующими критериями:

Например, Start-Service у командлета есть много параметров, но только два из них, Name и InputObject принимают входные данные конвейера. Параметр Name принимает строки, а параметр InputObject принимает объекты службы. Таким образом, можно передать строки, объекты служб и объекты со свойствами, которые могут быть преобразованы в строковые или служебные объекты.

PowerShell управляет привязкой параметров как можно эффективнее. Нельзя предложить или принудительно выполнить привязку PowerShell к конкретному параметру. Команда завершается ошибкой, если PowerShell не удается привязать перенаправленные объекты.

Дополнительные сведения об устранении ошибок привязки см. в разделе исследование ошибок конвейера далее в этой статье.

Однократная обработка

Передача объектов в команду во многом аналогична использованию параметра команды для отправки объектов. Рассмотрим пример конвейера. В этом примере мы используем конвейер для вывода таблицы объектов службы.

Функционально, это аналогично использованию параметра InputObject объекта Format-Table для отправки коллекции объектов.

Однако есть и важное отличие. При передаче нескольких объектов команде PowerShell по одной команде отправляет объекты в команду по одному. При использовании параметра команды объекты отправляются как один объект массива. Это небольшое различие имеет значительные последствия.

В следующих примерах массив и хэш-таблица передаются в Measure-Object командлет для подсчета количества объектов, полученных из конвейера. Массив содержит несколько элементов, а таблица Hashtable содержит несколько пар «ключ-значение». Только массив перечисляется по одному за раз.

Get-Member устраняет дубликаты, поэтому, если все объекты имеют одинаковый тип, он отображает только один тип объекта.

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

Исследование ошибок конвейера

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

В следующем примере мы пытаемся переместить запись реестра из одного раздела реестра в другой. Get-Item Командлет возвращает путь назначения, который затем передается в Move-ItemProperty командлет. Move-ItemProperty Команда задает текущий путь и имя перемещаемой записи реестра.

Команда завершается ошибкой, и PowerShell выводит следующее сообщение об ошибке:

Для изучения используйте Trace-Command командлет для трассировки компонента привязки параметров PowerShell. В следующем примере выполняется трассировка привязки параметра во время выполнения конвейера. Параметр PSHost отображает результаты трассировки в консоли, а параметр FilePath отправляет результаты трассировки в debug.txt файл для последующей ссылки.

Результаты трассировки имеют длину, но они показывают значения, привязанные к Get-Item командлету, а затем именованные значения, привязанные к Move-ItemProperty командлету.

Наконец, он показывает, что попытка привязки пути к параметру назначения Move-ItemProperty не удалась.

Используйте Get-Help командлет для просмотра атрибутов целевого параметра.

Результаты показывают, что назначение принимает только входные данные конвейера «по имени свойства». Таким образом, объект последовательного объекта должен иметь свойство с именем Destination.

Параметр path принимает входные данные конвейера по имени или по значению.

Чтобы исправить эту команду, необходимо указать назначение в Move-ItemProperty командлете и использовать Get-Item для получения пути к элементу, который нужно переместить.

Внутреннее продолжение строки

Как уже говорилось, конвейер — это серия команд, Соединенных операторами конвейера ( | ), обычно написанными на одной строке. Однако для удобства чтения PowerShell позволяет разбить конвейер на несколько строк. Если оператор Pipe является последним маркером в строке, средство синтаксического анализа PowerShell присоединяет следующую строку к текущей команде, чтобы продолжить построение конвейера.

Например, следующий однострочный конвейер:

можно записать следующим образом:

Начальные пробелы в последующих строках не являются значимыми. Отступ повышает удобочитаемость.

В PowerShell 7 добавлена поддержка продолжения конвейеров с символом конвейера в начале строки. В следующих примерах показано, как можно использовать эту новую функциональность.

При интерактивной работе в оболочке Вставка кода с конвейерами в начале строки выполняется только при использовании клавиши CTRL + V для вставки. Щелкните правой кнопкой мыши операции вставки, чтобы вставить строки по одному. Поскольку строка не заканчивается символом конвейера, PowerShell считает входные данные полными и выполняет эту строку как введенную.

Источник

Конвейер в PowerShell

Как задействовать все богатство функций PowerShell

Конвейер — основная концепция, которую необходимо изучить, иначе вы сможете использовать лишь ничтожную часть функций PowerShell. Конвейерный принцип был реализован еще в оболочках операционной системы Unix, затем скопирован в Cmd.exe, а в PowerShell поднят на новый уровень. Прежде чем перейти к теме конвейера PowerShell, я считаю целесообразным напомнить общие сведения, касающиеся стандартного входа и выхода.

Стандартный вход и выход

В Cmd.exe конвейер тесно связан со стандартным входом, перенаправлением входа, стандартным выходом и его перенаправлением. По существу, стандартный вход — это ввод с клавиатуры, если только вы не предписываете оболочке считать входные данные откуда-либо еще (перенаправление входа). Стандартный выход — это обычный результат выполнения команды, отображаемый на экране, если только вы не предписываете оболочке сохранить выходные данные куда-либо еще (перенаправление выхода).

Чтобы увидеть работу стандартного входа, введем в окне PowerShell или Cmd.exe следующую команду:

После ввода этой команды курсор стоит на месте и ждет дальнейшего ввода, так как по умолчанию команда Sort.exe сортирует стандартный вход. Поскольку мы ничего не указали, команда ожидает ввода. Для отмены действия команды нажмите комбинацию клавиш Ctrl+C.

Теперь предположим, что существует файл с именем MyData.txt, данные в котором требуется сортировать. Вот как будет выглядеть на экране сортируемый выход файла (стандартный выход):

В этом примере команда Type выводит содержимое файла MyData.txt как стандартный выход, который поступает на конвейер (|) и используется в качестве входа для Sort.exe.

Таким образом, используя в команде символ конвейера (|), мы создаем конвейер. При этом выход команды слева от этого символа поступает на вход команды, находящейся справа.

В большинстве командных оболочек (например, Cmd.exe) стандартный выход и стандартный вход представляют собой текст. Это делает решение многих задач, связанных с различными манипуляциями с данными, неудобным и громоздким. На приведенном экране показан пример «кульбитов», которые приходится сделать в Cmd.exe, чтобы всего лишь вывести список текстовых файлов, последний раз сохраненных в текущем году.

Экран. Сценарии Cmd.exe для вывода списка текстовых файлов, созданных в текущем году

Сценарий Sample1.cmd выводит время последнего сохранения каждого файла, за которым следует символ жесткой табуляции, после чего выводится имя файла. Сценарий Sample2.cmd берет текущий год и выполняет Sample1.cmd, выводя лишь те файлы, у которых год последнего сохранения совпадает с текущим годом. Красная стрелка указывает на символ жесткой табуляции в обоих сценариях. На экране также показан выходной результат выполнения Sample2.cmd (File1.txt и File3.txt).

Отметим, что оба сценария предусматривают синтаксический анализ строк, зависящий от формата строки даты (%%

tF в Sample1.cmd и %DATE% в Sample2.cmd). В отличных от американо-англоязычных версиях Windows строки кода, где используется дата, придется корректировать, так как различные языковые стандарты используют разные форматы даты. Кроме того, из-за мудреного синтаксиса сценарии Cmd.exe малопонятны и неудобны в использовании (к примеру, что означает%DATE:

Цель данного примера — продемонстрировать неуклюжее и громоздкое решение задачи, кажущейся простой (вывод списка файлов, созданных в текущем году). Здесь значительная часть проблемы обусловлена необходимостью выполнения синтаксического анализа строк для определения года. Кроме всего прочего, синтаксис года зависит от языкового стандарта, что может осложнить ситуацию для сред, в которых сценарии используются коллективно. Заметим также, что с появлением дополнительных требований (например, удалить файлы, последний раз сохраненные до наступления текущего года) сценарии будут становиться все более громоздкими и сложными для восприятия. Должен существовать более удобный путь. Давайте посмотрим, как подобные задачи решает PowerShell.

Конвейер PowerShell

Как уже говорилось, стандартный выход и стандартный вход — это средство, позволяющее командным оболочкам на базе текста (например, Cmd.exe) реализовать конвейерную передачу текстовых данных между программами. Конвейер PowerShell использует ту же основную схему, в рамках которой выход одной команды подается на вход другой команды, с той лишь разницей, что в этом случае выход и вход — это объекты, а не текст. При своей принципиальной простоте данная концепция имеет далеко идущие результаты.

Фильтрация с помощью Where-Object

Рассмотрим предыдущий пример: задача вывода списка файлов *.txt, в последний раз записанных в текущем году. В PowerShell это делается путем извлечения объектов файловой системы (Get-ChildItem) и выбора (Where-Object) только тех из них, у которых значением свойства LastWriteTime является текущий год:

Как видно из этого примера, команда Where-Object позволяет фильтровать объекты, подаваемые слева на конвейер. В качестве результата выводятся объекты, удовлетворяющие критерию, указанному в фильтре. Заметим, что синтаксический анализ даты не проводится, а просто определяется год последнего сохранения каждого файла.

Теперь предположим, что требуется удалить файлы, последнее сохранение которых выполнялось до начала текущего года. Чтобы решить эту задачу, достаточно немного изменить фильтр и подать результат по конвейеру на вход Remove-Item:

В этих двух командах PowerShell вместо передачи текстовых строк между командами передаются объекты: файл — это объект; дата его последнего сохранения — тоже объект.

Выполнение действий с помощью ForEach-Object

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

Выход этой команды — полный путь и имя каждого файла *.txt. Конечно, внутри блока сценария можно выполнить много других действий. Например, записать имена, а затем удалить файлы *.log из каталога C:\Logs позволяет такая команда:

Эта команда выводит текстовую строку «Удаление », а затем удаляет файл (Remove-Item). Все выведенные строки записываются в файл C:\Logs\Cleanup.txt.

Фильтрацию (Where-Object) можно комбинировать с действиями (ForEach-Object) для построения еще более гибких команд. Например, удалить файлы *.log старше шести месяцев и записывать имя каждого из них перед удалением позволяет следующая команда:

Даже если вы не являетесь экспертом по PowerShell, примерное понимание изложенных выше основ объектов и конвейера позволит вам разобраться, как работают эти команды PowerShell.

Мощь конвейера

Конвейер — это краеугольный камень, открывающий возможность реализации всего богатства функций PowerShell. Поэкспериментировав с описанными выше примерами, вы обнаружите, что PowerShell упрощает сложные задачи намного эффективнее, чем это возможно в Cmd.exe. Получить дополнительную информацию и ознакомиться с другими примерами можно в разделе справки PowerShell, посвященном конвейерам (https://technet.microsoft.com/en-us/library/hh847902.aspx).

Поделитесь материалом с коллегами и друзьями

Источник

Стандартный ввод-вывод и конвейеры командной строки

Стандартный ввод-вывод предоставляет мощные средства для операций в командной строке. Эти средства основаны на переадресации стандартного ввода-вывода. Большая часть команд операционной системы в их внутренней программной реализации построена таким образом, что для ввода и вывода данных используется исключительно стандартный ввод и вывод. В результате переадресация этого ввода или вывода в командной строке позволяет вместо экрана и клавиатуры использовать желаемые пользователю файлы.

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

(или соответственно ls >имя_файла ) и желаемая информация для будущего употребления запомнится в указанном файле. Ряд команд операционной системы строятся как фильтры, т.е. используют и стандартный ввод, и стандартный вывод. К таким командам относятся команды sort, more (общие для всех рассматриваемых ОС) и команда wc из Unix, которая подсчитывает число строк, слов и символов в файле, служащем для ввода информации (в частности, текста, вводимого с клавиатуры).

Практическое значение стандартного ввода-вывода особенно велико в связи с применением так называемых конвейеров в командной строке. Конвейер представляет заданное в команде связывание стандартного вывода одной команды с стандартным вводом другой – следующей в строке – команды. В качестве символа связывания команд в конвейер используется символ | (одинарная вертикальная черта). Конвейер по внешнему виду представляет запись

Здесь стандартный вывод команды команда1 автоматически связывается со стандартным вводом команды команда2. Поэтому данные результата первой команды не появляются на экране, а полностью передаются на вход второй команды, которая и использует их в качестве обрабатываемой ее информации. В одной составной команде может быть построен конвейер не только из двух, но и из любого числа команд, соединенных при записи символом вертикальной черты. Единственное требование при этом заключается в том, что для соединяемых таким путем команд первая из них должна использовать стандартный вывод, а вторая – стандартный ввод.

Практически наиболее часто в конвейерах используется команда more, которая оказывается заключительной в конвейере, поскольку выводит на экран, а не в стандартный вывод. Ее значение в том, что вывод на экран производится порциями по размеру экрана, это позволяет удобно наблюдать результаты объемного вывода на экране, где без ее использования часть выводимых данных исчезает – автоматически выдвигается за верхнюю границу экрана. Даже в операционных системах типа MS эта вспомогательная команда достаточно широко используется при текстовом выводе информации, в частности в составной команде

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

В Unix для использования конвейеров существует дополнительная команда tee, которая в качестве единственного аргумента требует указания имени файла и передавая данные со своего стандартного ввода на стандартный вывод одновременно запоминает передаваемые данные в заданном для нее файле. Она как бы кроме простой передачи с входа на выход еще и протоколирует все данные в файле.

При использовании стандартного ввода-вывода иногда возникает проблема запоминания сообщений об ошибках. Для вывода информации об ошибках предназначен стандартный поток ошибок, имеющий константное значение хэндла в Unix и OS/2, равное 2, причем этот вывод об ошибках по умолчанию поступает на экран.

Для переадресации стандартного ввода и стандартного вывода, как уже описывалось в гл. 2, в командной строке используются вспомогательные символы ‘ ‘ соответственно. Для переадресации стандартного потока ошибок используется запись вида

Предоставляется также возможность направлять данные об ошибках в стандартный поток обычного вывода. Для этого предназначена запись вида

Наконец, существует возможность при необходимости перенаправить стандартный вывод в стандартный поток ошибок, что задается записью

При использовании переназначений с помощью символов обозначений >имя_файла предыдущее содержимое файла с именем имя_файла теряется (внутренними процедурами файл открывается для записи с усХчением Фо нуля предыдущеУо содержимоУо). В ряде случаХв, особенно при протоколированШи ошШбок, может представлять интерес сохранение предыдущего содержимого указанного таким образом файла и приписывание в его конец новых данных. Для решений этой задачи предлагается использовать вместо одного символа ‘>’ два таких символа подряд и без разрыва между ними.

В частности команда

указывает – брать исходные данные в файле файл1, помещать данные стандартного вывода в файл файл2 и дописывать в конец файла файл3 сообщения стандартного потока ошибок текущей команды команда.

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • конвейер linux что такое
  • компрессор звука для windows 10
  • компрессор для видео для windows
  • компрессор видео для виндовс
  • компоненты службы шифрования не зарегистрированы windows 7

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии