Время на прочтение
3 мин
Количество просмотров 326K
Недавно я вырос из лютого эникея в очень большой компании, до скромного сисадмина надзирающего за сетью в 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 — Диалоговое окно, содержащее историю команд.
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
Если нужно, чтобы вторая команда выполнялась только после успешного выполнения первой, используются формат
&&
:
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 команда перезапустит службу 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!"
Оператор
||
используется, когда нужно выполнить команду, если первая команда вернула ошибку:
get-service servicename || write-host "missing service"
NovaInfo 11, скачать PDF
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 3
Аннотация
В статье рассматривается способ выделять из перехваченных данных необходимые для дальнейшего использования.
Ключевые слова
ПРОГРАММА, С#, КОМПЛЕКСИРОВАНИЕ, ПРОГРАММНЫЕ СРЕДСТВА, WINDOWS, СИСТЕМЫ КОМАНД, КОНВЕЙЕРИЗАЦИЯ КОМАНД
Текст научной работы
Конвейер команд
Выделять из перехваченных данных необходимые для дальнейшего использования можно, используя конвейер команд.
Рассмотрим выдачу, полученную командой 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
- Кириченко А.А.
В статье рассмотрены краткие характеристики сетевых команд операционной системы Windows.
-
Справочные данные некоторых команд
- Кириченко А.А.
В статье приводятся справочные данные некоторых команд.
NovaInfo 11, , Технические науки -
Запуск команд ос из с#-программы
- Кириченко А.А.
В статье рассматривается проблема запуска команд ОС из С#-программы.
NovaInfo 11, , Технические науки -
Создание процессов и управление ими
- Кириченко А.А.
В статье рассмотрена проблема создания процессов и управление ими.
NovaInfo 11, , Технические науки -
Классы .net для работы с процессами
- Кириченко А.А.
В статье рассматриваются классы .NET для работы с процессами.
NovaInfo 11, , Технические науки
Цитировать
Кириченко, А.А. Конвейеризация команд Windows / А.А. Кириченко. — Текст : электронный // NovaInfo, 2013. — № 11 — URL: https://novainfo.ru/article/2406 (дата обращения: 09.10.2023).
Поделиться
С
помощью переназначения устройств
ввода/вывода одна программа может
направить свой вывод на вход другой или
перехватить вывод другой программы,
используя его в качестве своих входных
данных. Таким образом, имеется возможность
передавать информацию от процесса к
процессу при минимальных программных
издержках. Практически это означает,
что для программ, которые используют
стандартные входные и выходные устройства,
ОС позволяет:
-
выводить сообщения программ не на экран
(стандартный выходной поток), а в файл
или на принтер (перенаправление вывода); -
читать входные данные не с клавиатуры
(стандартный входной поток), а из заранее
подготовленного файла (перенаправление
ввода); -
передавать сообщения, выводимые одной
программой, в качестве входных данных
для другой программы (конвейеризация
или композиция команд).
Из
командной строки эти возможности
реализуются следующим образом. Для
того, чтобы перенаправить текстовые
сообщения, выводимые какой-либо командой,
в текстовый файл, нужно использовать
конструкцию
команда
> имя_файла
Если
при этом заданный для вывода файл уже
существовал, то он перезаписывается,
если не существовал — создается. Можно
также не создавать файл заново, а
дописывать
информацию, выводимую командой, в конец
существующего файла. Для этого команда
перенаправления вывода должна быть
задана так:
команда
>> имя_файла
С
помощью символа <
можно прочитать входные данные для
заданной команды не с клавиатуры, а из
определенного (заранее подготовленного)
файла:
команда
< имя_файла
Приведем
несколько примеров перенаправления
ввода/вывода.
-
Вывод встроенной справки для команды
COPY в файл copy.txt:
COPY
/? > copy.txt
-
Добавление текста справки для команды
XCOPY в файл copy.txt:
XCOPY
/? >> copy.txt
-
Вывод текущей даты в файл
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
[сообщение]
которая
выводит сообщение на экран. Пример
использования этой команды.
-
Удаление всех файлов в текущем каталоге
без предупреждения (автоматический
положительный ответ на запрос об
удалении):
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к ДО
- #
- #
- #
- #
- #
- #
If you are a Windows user, you are aware that Command-Line and PowerShell are the most powerful and useful tools for automating various complex administrative tasks. In most cases, we perform a single command/cmdlet per line, execute it, and then move on to the next line to create additional cmdlets. However, it will be even more efficient if we run two or more commands on the command line at the same time, saving you time and typing.
We called those combining two or more commands into one line Command Chaining.
In this tutorial, Ourtechroom will walk you through various methods for combining multiple commands efficiently.
Using Semicolon(;) Operator
The semicolon operator is a helpful operator that allows you to execute many instructions in succession, regardless of whether the previous command succeeded or failed. As a result, the semicolon is useful when the commands are not interdependent.
Usage:
command1 ; command2 ; command3 [; command4 …]
There is no need for a space between each command, in this case, it is provided for better readability.
In this case, command1 will be executed first, followed by command2, regardless of whether command1 is executed successfully or not. Then, regardless of whether commands 1 and 2 succeed or fail, command 3 will be executed. So, we can say they execute serially one by one.
In Powershell
The use case of the semicolon operator in Powershell is as follows
Example 1:
mkdir TestFolder ; ipconfig /all
In this example, commands are executed sequentially from left to right. First, mkdir makes TestFolder in Current Path and then gets ipconfig information. These two commands run independently. Suppose if TestFolder already exists then mkdir will not make a folder but it will execute ipconfig and display it in the PowerShell console.
Example 2:
ipconfig /release ; ipconfig /renew
This will release the IP assigned to the computer and renew the new ip.
Example 3:
Write-Host «Get File version» ; $fileversion = (Get-Command C:\Windows\System32\appwiz.cpl).FileVersionInfo.FileVersion ; Write-Host «File version -» $fileversion
Here we have 3 commands each separated by a semicolon. These commands are executed in the following order: print message, get file version, and print output. If one failed the other will execute. If all fails nothing will be executed. If nothing failed all will be executed.
Example 4:
Stop-Process -Name notepad ; Get-Process cmd
If cannot stop a notepad process, then also we will get cmd process information.
In Command:
In the Command prompt, we do not have the use of a Semicolon separator to separate commands.
Using OR(||) Operator
Here, only the command after || will run if the command before || failed to execute. ie.Cmd.exe/PowerShell executes the first command first, then the second command only if the first command fails.
Usage:
command1 || command2 || command3 [|| command4 …]
Here, Command2 runs only if command1 failed, and command3 will run only if command1 and command2 failed and soon.
In Powershell:
To run || separator you will need Powershell 7 version.
writeeee-host «Syntax Error» || write-host «second command»
The first command syntax is a mistake so will execute the second command and will print out «Second Command»
In Command Prompt
Example 1:
cd Develop || mkdir Develop || echo «Develop directory not found and could not be created»
Here, if Develop directory is found then this whole command will just change the directory to «Develop».If Develop directory is not found then mkdir commands make Develop directory and if cannot create Develop directory then will print «Develop directory not found and could not be created».
Using AND(&&) Operator
If anyone left of an operator fails then all other commands located right of the operator won’t be executed. If you want each command to be executed only if the previous one was successful, combine them with the && operator.
You can use this in both CMD and Powershell.
Usage:
command1 && command2 && command3 [&& command4 …]
Here, if command2 runs only if command1 succeeded. Also, command3 runs only if command1 and command2 succeed and soon.
In Command Prompt:
Example:
mkdir MyNewFolder && cd MyNewFolder
If the first command, mkdir, succeeds, MyNewFolder will be created in the current path and the path will be automatically changed and moved inside MyNewFolder.
If you want to run the above command in PowerShell then try this:
(mkdir MyNewFolder ) -and (cd MyNewFolder )
and it does the same as in the command prompt.
In Powershell 7 Preview 5+:
&& operator is now available for PowerShell 7 Preview 5+:
echo «Hello!» && echo «World!»
Using | Operator
If you want to use the output of one command as the input of another command then you can use the pipe(|) operator.It is used extensively in Windows Powershell.
ie. The output of the first command acts as input to the second command and the output of the second to another command is connected via a pipe.
Example:
command1 | command2 | command3
Here, the output of command1 is input to command2, and the output of command2 acts as input to command. Then the result is displayed in the console because there are no more commands in the pipeline.
Practical Example:
This will list all the processes and then all the processes are sorted by CPU usage in ascending order and the last 5 records of the process will be taken. This diagram depicts the top five processes that consume the most resources.
Get-Process | sort CPU | select -last 5
Using Grouping Operator in Powershell
This grouping operator is used to group multiple commands in a single scope. For example:
(dir; echo "Current directory Contents") > temp.txt
This command will group the content of the current direction and write them back to temp.txt file.
Using Redirection Operator
There are various types of redirection operators and they are as follows:
< > >| << >> <& >& <<- <>
Redirections are handled in the order in which they appear, from left to right.
Using ‘>’ redirection operator
> operator writes to a new file.
Example:
ipconfig /all > yournetworkdetails.txt
This will the output of ipconfig /all command in yournetworkdetails.txt file as shown below.
Note that if there are no yournetworkdetails.txt files then it will create it.
Using ‘>>’ redirection operator
>> operator appends to a file.
Using ‘<‘ redirection operator
< operator input from a file.