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

Время на прочтение3 мин

Количество просмотров333K

Недавно я вырос из лютого эникея в очень большой компании, до скромного сисадмина надзирающего за сетью в 10 ПК. И, как очень ленивый сисадмин, столкнулся с задачами по автоматизации своей деятельности. Полгода назад я еще не знал, что в командной строке Windows есть конвейеры. Это стало первым шокирующим открытием. И я пошел дальше, и выяснилось, что там, где я раньше писал утилитки на C#, Delphi или громоздкие скрипты с вложенными циклами, можно было обойтись парой команд forfiles или robocopy.
Не буду рассказывать о банальностях, типа о перечислении файлов и папок клавишей Tab. Под хабракатом расскажу о том, что может быть полезно начинающим админам и эникеям.

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

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

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

ping 192.168.25.1

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

ping 192.168.2

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

image

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

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

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

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

|

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

dir | find ".txt"
Оператор объединения команд

&

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

Оператор И

&&

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

Оператор ИЛИ

||

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

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

  • (Команда1 & Команда2) && Команда3 – Если Команды1 и Команды2, выполнятся успешно, произойдет выполнение Команды3.
  • (Команда1 & Команда2) || Команда3 — Если Команды1 и Команды2, не выполнятся, произойдет выполнение Команды3.

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

UPD1

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

^C — Прерывает команду, ну это все знают.
^S — Приостанавливает выполнение команды, а потом запускает.
^I — Аналог Tab, перебирает папки и файлы.
^M — Аналог Enter.
^H — Аналог Backspace.
^G — Написав в пакетном файле команду echo ^G можно пикать системным динамиком(спикером).
(Команды ^I и ^H, получены мной методом «научного тыка», еще есть ^J но не знаю, что она делает)

P.S. Другие тонкости командной строки Windows, уже неоднократно освещались на Хабре. И не вижу смысла копи-пастить.
P.P.S. Ссылки на интересные посты и статьи по другим возможностям командной строки Windows:
Ввод-вывод, циклы, переменные
Работа с массивами
Интереснейший топик по теме

В этой небольшой заметке рассмотрим, как выполнить несколько cmd или PowerShell команд в одной строке. Такая задача периодически возникает при вызове команд PowerShell из внешних программ, из планировщика заданий Windows, логон скриптов, когда нужно обойти политику выполнения скриптов PowerShell, или когда нужно быстро передать пользователю кусок кода для выполнения при диагностике/ исправлении проблем на компьютере.

Выполнение нескольких команд в консоли CMD

В cmd для последовательного запуска команд в одной строке используется оператор
&
. Например:

net stop wuauserv & net start wuauserv & wuauclt /detectnow

выполнить несколько последовательных команда в cmd

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

ipconfig /flushdns && ipconfig /renew

Можно использовать и обратное условие: вторая команда будет выполнена, только если первая вернула ошибку:

net stop wuauserv6 || net start wuauserv

Запуск нескольких команд PowerShell в одной строке

В PowerShell если использовать знак амперсанда для разделения команд в одной строке, появится ошибка:

The ampersand (&) character is not allowed. The & operator is reserved for future use;

Вместо знака & для разделения команд PowerShell в одной строке используется символ точка с запятой (
;
):

restart-service wuauserv -verbose; get-process notepad

запуск нескольких командлетов powershell в одну строку

Эта однострочная PowerShell команда перезапустит службу Windows и после завершения первой команды выведет информацию о процессе.

Популярным примером сокращения команд в PowerShell является конвейеры (pipe/pipeline), которые позволяют передать результаты одной команды следующей по конвейеру. В PowerShell в качестве оператора конвейера используется символ “|”. Например, пример команды с конвейером:

Get-Service -Name wususerv | Stop-Service

Этот же код в полном виде можно записать в несколько строк:

$service = Get-Service -Name wususerv
$serviceName = $service.Name
Stop-Service -Name $serviceName

Получилась неплохая экономия по размеру кода, а код стал даже более простым и читаемым.

Для запуска нескольких команда PowerShell через меню Пуск -> Выполнить, используйте формат:

powershell -command &"{ipconfig /all; tracert yandex.ru; pause "Press any key to continue"}"

Если вы запускаете эти же команды через консоль powershell, используйте синтаксис:

powershell -command {ipconfig /all; tracert yandex.ru; pause "Press any key to continue"}

При запуске нескольких команд PowerShell через планировщик Windows, можно использовать такой формат:

c:\windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command {Get-EventLog -LogName security; ipconfig /all ; get-service servicename}"

В версии PowerShell Core 7.x доступны новые операторы && и ||. Они работают так, же как в cmd.

Оператор
&&
выполнит команды PowerShell справа от себя, если команда слева выполнена успешно:

Write-host "Hello!" && Write-host "World!"

условные команды в одной строке powershell

Оператор
||
используется, когда нужно выполнить команду, если первая команда вернула ошибку:

get-service servicename || write-host "missing service"

выполнить вторую команду powershell, если первая вернула ошибку

Аннотация: Обсуждается процесс конвейеризации объектов в PowerShell. Рассматриваются процедуры фильтрации и сортировки потока объектов. Описываются командлеты для форматирования выводимых данных и перенаправления выходных потоков команд

Конвейеризация и управление выводом команд Windows PowerShell

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

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

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

Конвейеризация объектов в PowerShell

Конвейер в PowerShell – это последовательность команд, разделенных между собой знаком | (вертикальная черта). Каждая команда в конвейере получает объект от предыдущей команды, выполняет определенные операции над ним и передает следующей команде в конвейере. С точки зрения пользователя, объекты упаковывают связанную информацию в форму, в которой информацией проще манипулировать как единым блоком и из которой при необходимости извлекаются определенные элементы.

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

При передаче по конвейеру объектов этой проблемы не возникает, здесь нужная информация извлекается из элемента конвейера простым обращением к соответствующему свойству объекта. Однако теперь возникает новый вопрос: каким образом узнать, какие именно свойства есть у объектов, передаваемых по конвейеру? Ведь при выполнении того или иного командлета мы на экране видим только одну или несколько колонок отформатированного текста. Например, запустим командлет Get-Process, который выводит информацию о запущенных в системе процессах:

PS C:\> Get-Process

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    158      11    45644      22084   126   159.69   2072 AcroRd32
     98       5     1104        284    32     0.10    256 alg
     39       1      364        364    17     0.26   1632 ati2evxx
     57       3     1028        328    30     0.38    804 atiptaxx
    434       6     2548       3680    27    21.96    800 csrss
     64       3      812        604    29     0.22   1056 ctfmon
    364      11    14120       9544    69    11.82    456 explorer
     24       2     1532       2040    29     5.34   2532 Far

Фактически на экране мы видим только сводную информацию (результат форматирования полученных данных), а не полное представление выходного объекта. Из этой информации не понятно, сколько точно свойств имеется у объектов, генерируемых командой Get-Process, и какие имена имеют эти свойства. Например, мы хотим найти все «зависшие» процессы, которые не отвечают на запросы системы. Можно ли это сделать с помощью командлета Get-Process, какое свойство нужно проверять у выводимых объектов?

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

Просмотр структуры объектов

Для анализа структуры объекта, возвращаемого определенной командой, проще всего направить этот объект по конвейеру на командлет Get-Member (псевдоним gm ), например:

PS C:\> Get-Process | Get-Member

   TypeName: System.Diagnostics.Process

Name                    MemberType     Definition
----                    ----------     ----------
Handles                 AliasProperty  Handles = Handlecount
Name                    AliasProperty  Name = ProcessName
NPM                     AliasProperty  NPM = NonpagedSystemMemorySize
PM                      AliasProperty  PM = PagedMemorySize
VM                      AliasProperty  VM = VirtualMemorySize
WS                      AliasProperty  WS = WorkingSet
. . .
Responding              Property       System.Boolean Responding {get;}
. . .

Здесь мы видим имя .NET-класса, экземпляры которого возвращаются в ходе работы исследуемого командлета (в нашем примере это класс System.Diagnostic.Process), а также полный список элементов объекта (в частности, интересующее нас свойство Responding, определяющего «зависшие» процессы). При этом на экран выводится очень много элементов, просматривать их неудобно. Командлет Get-Member позволяет перечислить только те элементы объекта, которые являются его свойствами. Для этого используется параметр MemberType со значением Properties:

PS C:\> Get-Process | Get-Member -MemberType Property

   TypeName: System.Diagnostics.Process

Name                       MemberType Definition
----                       ---------- ----------
BasePriority               Property   System.Int32 BasePriority {get;}
Container                  Property   System.ComponentModel.IContainer...
EnableRaisingEvents        Property   System.Boolean EnableRaisingEvents...
ExitCode                   Property   System.Int32 ExitCode {get;}
ExitTime                   Property   System.DateTime ExitTime {get;}
Handle                     Property   System.IntPtr Handle {get;}
HandleCount                Property   System.Int32 HandleCount {get;}
HasExited                  Property   System.Boolean HasExited {get;}
Id                         Property   System.Int32 Id {get;}
MachineName                Property   System.String MachineName {get;}
. . . 
Responding                 Property   System.Boolean Responding {get;}
. . .

Как мы видим, процессам операционной системы соответствуют объекты, имеющие очень много свойств, на экран же при работе командлета Get-Process выводятся лишь несколько из них (способы отображения объектов различных типов задаются конфигурационными файлами в формате XML, находящимися в каталоге, где установлен файл powershell.exe).

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

Фильтрация объектов в конвейере

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

Например, для вывода информации о «зависших» процессах (объекты, возвращаемые командлетом Get-Process, у которых свойство Responding равно False ) можно использовать следующий конвейер:

Get-Process | Where-Object {-not $_.Responding}

Другой пример – оставим в конвейере только те процессы, у которых значение идентификатора (свойство Id ) больше 1000:

Get-Process | Where-Object {$_.Id -gt 1000}

В блоках сценариев командлета Where-Object для обращения к текущему объекту конвейера и извлечения нужных свойств этого объекта используется специальная переменная $_, которая создается оболочкой PowerShell автоматически. Данная переменная используется и в других командлетах, производящих обработку элементов конвейера.

Условие проверки в Where-Object задается в виде блока сценария – одной или нескольких команд PowerShell, заключенных в фигурные скобки {}. Результатом выполнения данного блока сценария должно быть значение логического типа: True (истина) или False (ложь). Как можно понять из примеров, в блоке сценария используются специальные операторы сравнения.

Замечание

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

Основные операторы сравнения приведены в табл. 17.1.

Таблица
17.1.
Операторы сравнения в PowerShell

Оператор Значение Пример (возвращается значение True)
-eq равно 10 -eq 10
-ne не равно 9 -ne 10
-lt меньше 3 -lt 4
-le меньше или равно 3 –le 4
-gt больше 4 -gt 3
-ge больше или равно 4 -ge 3
-like сравнение на совпадение с учетом подстановочного знака в тексте «file.doc» –like «f*.doc»
-notlike сравнение на несовпадение с учетом подстановочного знака в тексте «file.doc» –notlike «f*.rtf»
-contains содержит 1,2,3 –contains 1
-notcontains не содержит 1,2,3 –notcontains 4

Операторы сравнения можно соединять друг с другом с помощью логических операторов (см. табл. 17.2).

Таблица
17.2.
Логически операторы в PowerShell

Оператор Значение Пример (возвращается значение True)
-and логическое И (10 -eq 10) –and (1 –eq 1)
-or логическое ИЛИ (9 -ne 10) –or (3 –eq 4)
-not логическое НЕ -not (3 –gt 4)
! логическое НЕ !(3 -gt 4)
Сортировка объектов

Сортировка элементов конвейера – еще одна операция, которая часто применяется при конвейерной обработке объектов. Данную операцию осуществляет командлет Sort-Object: ему передаются имена свойств, по которым нужно произвести сортировку, а он возвращает данные, упорядоченные по значениям этих свойств.

Например, для вывода списка запущенных в системе процессов, упорядоченного по затраченному процессорному времени (свойство cpu ), можно воспользоваться следующим конвейером:

PS C:\> Get-Process | Sort-Object cpu

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
      0       0        0         16     0               0 Idle
     36       2      728         32    23     0.05   1792 klswd
     98       5     1104        764    32     0.09    252 alg
     21       1      164         60     4     0.09    748 smss
     30       2      672        724    27     0.11   1700 WinCinemaMgr
     39       1      364        464    17     0.12   1644 ati2evxx
    163       6     1536       1404    35     0.12   1612 svchost
     55       3     1088        852    27     0.14   1220 svchost
     22       2      504        712    23     0.14    772 winampa
    120       4     2364       1228    35     0.26   1876 svchost
    170       5     4516        796    44     0.27   1260 GoogleToolbarNotifier
    193       5     2916       1488    59     0.29   1040 svchost
     64       3      812       1080    29     0.30   1252 ctfmon
    140       5     3208       1220    41     0.32   1524 spoolsv
    281      14     1764       1688    37     0.34   1120 svchost
     57       3     1028        996    30     0.39    932 atiptaxx
    503      52     7296       3596    51     2.47    836 winlogon
    259       6     1432       1340    19     2.48    880 services
    341       8     3572       1856    40     5.36    892 lsass
    240     158    29536      10388   175     5.58   1780 outpost
    149       4     2940       1108    41     9.29   1248 kav
    398       5    36140      26408   137     9.97   1984 powershell
    375      12    15020      10456    75    14.03   1116 explorer
    376       0        0         36     2    14.97      4 System
    409       6     2500       3192    26    20.10    812 csrss
   1513      54    13528       9800    95    25.78   1156 svchost
    717      75    37432        704   145    56.97   1748 kavsvc
    152       4     2372       2716    38    58.09   2028 wmiprvse
    307      13    10952      27080   173  9128.03   1200 WINWORD

17.1.

Для сортировки в обратном порядке используется параметр Descending:

PS C:\> Get-Process | Sort-Object cpu -Descending

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
    307      13    10956      27040   173  9152.23   1200 WINWORD
    152       4     2372       2716    38    59.19   2028 wmiprvse
    717      75    37432       1220   145    57.15   1748 kavsvc
   1524      54    13528       9800    95    26.13   1156 svchost
    410       6     2508       3224    26    20.62    812 csrss
    376       0        0         36     2    15.11      4 System
    377      13    15020      10464    75    14.20   1116 explorer
    374       5    36484      26828   137    10.53   1984 powershell
    149       4     2940       1108    41     9.34   1248 kav
    240     158    29536      10388   175     5.61   1780 outpost
    344       8     3572       1856    40     5.40    892 lsass
    512      53     7324       3608    51     2.51    836 winlogon
    259       6     1432       1340    19     2.48    880 services
     57       3     1028        996    30     0.39    932 atiptaxx
    281      14     1764       1688    37     0.34   1120 svchost
    140       5     3208       1220    41     0.32   1524 spoolsv
     64       3      812       1080    29     0.30   1252 ctfmon
    193       5     2916       1488    59     0.29   1040 svchost
    170       5     4516        796    44     0.27   1260 GoogleToolbarNotifier
    120       4     2364       1228    35     0.26   1876 svchost
     22       2      504        712    23     0.15    772 winampa
     55       3     1088        852    27     0.14   1220 svchost
     39       1      364        464    17     0.13   1644 ati2evxx
    163       6     1536       1404    35     0.12   1612 svchost
     30       2      672        724    27     0.11   1700 WinCinemaMgr
     21       1      164         60     4     0.09    748 smss
     98       5     1104        764    32     0.09    252 alg
     36       2      728         32    23     0.05   1792 klswd
      0       0        0         16     0               0 Idle

17.2.

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

Get-Process | Where-Object {$_.Id -gt 1000} | Sort-Object cpu -Descending

  1. 1 ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ ВЫСШАЯ ШКОЛА ЭКОНОМИКИ, 101000, РОССИЯ, Г. МОСКВА, УЛ МЯСНИЦКАЯ, ДОМ 20
NovaInfo

11
Опубликовано 8 февраля 2013 г.
Раздел: Технические науки
Просмотров за месяц: 1

Аннотация

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

Ключевые слова

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

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

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

28.03.2006 23:31 <DIR> 777
25.01.2007 19:16 <DIR> Из HSE 
17.09.2005 15:56 <DIR> 2 
10.09.2005 16:05 <DIR> 1
21.11.2005 22:47 <DIR> PerfLogs
04.12.2005 19:24 <DIR> temp
15.01.2006 16:57 <DIR> 2006н 02.03.2006 18:12 <DIR> Magic Waterfall Screensaver
04.03.2006 13:52 <DIR> Test_System
02.05.2006 16:22 <DIR> Webservers
02.02.2004 22:26 <DIR> DVD 17.05.2006 15:54 410 543 braun_dyen_kod_da_vinchi.rt f.zip
11.05.2006 16:19 184 320 Olympus 310.doc
06.10.2006 11:12 26 624 bakers word.doc
03.01.2005 16:44 <DIR> lc
25.03.2004 11:09 <DIR> ACTIVstudio
21.02.2005 18:30 182 18.07.2005 13:07 <DIR> 2005-2006 уч год 11.08.2005 11:48 <DIR> JPG-BMP
9 файлов 622 331 байт
29 папок 254 394 368 байт свободно
С:\>_

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

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

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

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

  • Сколько файлов содержится в данном каталоге?
  • Какой объём занимают файлы, хранящиеся в данном каталоге?
  • Сколько папок содержится в данном каталоге?
  • Сколько свободного места есть на данном диске?

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

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

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

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

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

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

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

Первая команда получит информацию о корневом директории диска С:, а вторая позволит выделить из этой информации (иногда -очень большого объёма) нужную.

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

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

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

C:\>dir | find "файлов"
19 файлов 136 257 байт

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

C:\>dir | find "байт"
19 файлов 136 257 байт

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

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

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

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

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

C:\77>dir | find "файлов"
19 файлов 136 257 байт

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

C:\>dir AX1 | findstr "файлов"
25 файлов 3 444 924 байт

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

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

C:\77>dir | find ".txt" и получим ответ:
05.11.2006 12:36 23 004 test0-1.txt
04.11.2006 17:38 16 572 test0-1v2.txt

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

Читайте также

  • Краткая характеристика сетевых команд операционной системы Windows

    Кириченко А.А.

    NovaInfo 11, , Технические науки

    В статье рассмотрены краткие характеристики сетевых команд операционной системы Windows.

  • Справочные данные некоторых команд

    Кириченко А.А.

    NovaInfo 11, , Технические науки

    В статье приводятся справочные данные некоторых команд.

  • Запуск команд ос из с#-программы

    Кириченко А.А.

    NovaInfo 11, , Технические науки

    В статье рассматривается проблема запуска команд ОС из С#-программы.

  • Создание процессов и управление ими

    Кириченко А.А.

    NovaInfo 11, , Технические науки

    В статье рассмотрена проблема создания процессов и управление ими.

  • Классы .net для работы с процессами

    Кириченко А.А.

    NovaInfo 11, , Технические науки

    В статье рассматриваются классы .NET для работы с процессами.

Цитировать

Кириченко, А.А. Конвейеризация команд Windows / А.А. Кириченко. — Текст : электронный // NovaInfo, 2013. — № 11 — URL: https://novainfo.ru/article/2406 (дата обращения: 14.05.2025).

Поделиться

Популярные статьи

  • Лечебная физическая культура при желчнокаменной болезни (ЖКБ)

    Мифтахов А.Ф.

    NovaInfo 113, с.55-56, , Медицинские науки

    В данной статье рассмотрено такое заболевание как желчнокаменная болезнь (ЖКБ). Описаны признаки, симптомы, задачи ЛФК при данной болезни. Ключевым моментом статьи является комплекс упражнений лечебной физической культуры при ЖКБ, который рекомендован наряду с медикаментозным лечением.

  • Про технику разведения крупнорогатых скотов

    Жеруков А.В.

    NovaInfo 54, с.34-42, , Технические науки

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

  • Сад Плюшкина: анализ шестой главы в произведении Н.В. Гоголя «Мёртвые души»

    Бочарова А.С.

    NovaInfo 33, , Филологические науки

    В данной статье представлен анализ сада Плюшкина, как образа рая в шестой главе «Мертвых душ» Н.В.Гоголя.

  • Психология восприятия цвета человеком

    Волкова Ю.А.

    NovaInfo 57, с.534-540, , Искусствоведение

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

  • «Формальник» или лицо, в отношении которого формально действуют законные основания для установления административного надзора

    Супонина Е.А.

    NovaInfo 53, с.197-205, , Юридические науки

    Статья посвящена: вопросу необходимости оптимизации, как нормативной правовой базы, так и организационных основ деятельности участковых уполномоченных полиции (далее – УУП) по осуществлению административного надзора за лицами, в отношении которых формально действуют законные основания для установления за ними административного надзора; проблемам, с которыми в настоящее время сталкиваются УУП при осуществлении административного надзора.

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

  • выводить сообщения программ не на экран
    (стандартный выходной поток), а в файл
    или на принтер (перенаправление вывода);

  • читать входные данные не с клавиатуры
    (стандартный входной поток), а из заранее
    подготовленного файла (перенаправление
    ввода);

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

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

команда
> имя_файла

Если
при этом заданный для вывода файл уже
существовал, то он перезаписывается,
если не существовал — создается. Можно
также не создавать файл заново, а
дописывать
информацию, выводимую командой, в конец
существующего файла. Для этого команда
перенаправления вывода должна быть
задана так:

команда
>> имя_файла

С
помощью символа <
можно прочитать входные данные для
заданной команды не с клавиатуры, а из
определенного (заранее подготовленного)
файла:

команда
< имя_файла

Приведем
несколько примеров перенаправления
ввода/вывода.

  1. Вывод встроенной справки для команды
    COPY в файл copy.txt:

COPY
/? > copy.txt

  1. Добавление текста справки для команды
    XCOPY в файл copy.txt:

XCOPY
/? >> copy.txt

  1. Вывод текущей даты в файл
    date.txt (DATE /T
    — это команда для просмотра и изменения
    системной даты, T
    ключ для получения только даты без
    запроса нового значения):

DATE
/T

>
date.txt

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

команда
2> имя_файла

В
этом случае стандартный вывод будет
производиться на экран. Также имеется
возможность информационные сообщения
и сообщения об ошибках выводить в один
и тот же файл. Делается это следующим
образом:

команда
> имя_файла 2>&1

Например,
в приведенной ниже команде стандартный
выходной поток и стандартный поток
ошибок перенаправляются в файл copy.txt:

XCOPY
A:\1.txt C: > copy.txt 2>&1

Наконец,
с помощью конструкции

команда1
| команда2

можно
использовать сообщения, выводимые
первой командой, в качестве входных
данных для второй команды (конвейер
команд).

Используя
механизмы перенаправления ввода/вывода
и конвейеризации, можно из командной
строки посылать информацию на различные
устройства и автоматизировать ответы
на запросы, выдаваемые командами или
программами, использующими стандартный
ввод. Для решения таких задач служит
команда

ECHO
[сообщение]

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

  1. Удаление всех файлов в текущем каталоге
    без предупреждения (автоматический
    положительный ответ на запрос об
    удалении):

ECHO
y | DEL *.*

1.2.5.
Команды
MORE и
SORT

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

MORE
[диск:][путь]имя_файла

MORE
< [диск:][путь]имя_файла

имя_команды
| MORE

Параметр
[диск:][путь]имя_файла
определяет расположение и имя файла с
просматриваемыми на экране данными.
Параметр имя_команды
задает
команду, вывод которой отображается на
экране (например, DIR
или команда TYPE,
использующаяся для вывода содержимого
текстового файла на экран). Приведем
два примера.

Для
поэкранного просмотра текстового файла
news.txt возможны следующие варианты команд:

MORE
news.txt

MORE
< news.txt

TYPE
news.txt | MORE

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

SORT
[/R] [/+n] [[диск1:][путь1]файл1] [>
[диск2:][путь2]файл2]

или

[команда
|] SORT [/R] [/+n] [> [диск2:][путь2]файл2]

В
первом случае параметр [диск1:][путь1]файл1
определяет
имя файла, который нужно отсортировать.
Во втором случае будут отсортированы
выходные данные указанной команды. Если
параметры файл1
или команда не заданы, то SORT
будет считывать данные с устройства
стандартного ввода.

Параметр
[диск2:][путь2]файл2
задает файл, в который будет направляется
сортированный вывод; если этот параметр
не задан, то вывод будет направлен на
устройство стандартного вывода.

По
умолчанию сортировка выполняется в
порядке возрастания. Ключ /R
позволяет изменить порядок сортировки
на обратный (от Z к A и затем от 9 до 0).
Например, для поэкранного просмотра
отсортированного в обратном порядке
файла price.txt, нужно задать следующую
команду:

SORT
/R < price.txt |MORE

Ключ
/+n
задает сортировку в файле по символам
n-го столбца. Например, /+10
означает, что сортировка должна
осуществляться, начиная с 10-й позиции
в каждой строке. По умолчанию файл
сортируется по первому столбцу.

Соседние файлы в папке ОС 2013 2к ДО

  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Бенчмарк для сервера windows
  • Какой браузер лучше для windows 10 отзывы
  • Windows shortcut minimize all windows
  • Параметры скриншота windows 10
  • Как понять какая видеокарта стоит на ноутбуке windows 10