- Перенаправление ввода-вывода средствами командного интерпретатора ОС
- Цикл довузовской подготовки кафедры ЭФУ
- СТРУКТУРА ПРАКТИКУМА
- ЗАДАНИЕ №1
- ЗАДАНИЕ №2
- ЗАДАНИЕ №3
- ЗАДАНИЕ №4
- ЗАДАНИЕ №5
- ВВЕДЕНИЕ
- 1. ОСНОВЫ КОМАНДНОЙ СТРОКИ MS WINDOWS
- 1. Начало работы с командной строкой
- 2. Структура файловой системы Windows
- 3. Работа с текстовыми файлами в Cmd.exe
- 4. Копирование и перемещение файлов и директорий
- 2. ЭФФЕКТИВНАЯ РАБОТА С КОМАНДНОЙ СТРОКОЙ
- 1. Полезные инструменты командной строки
- 2. Настройка параметров командной оболочки
- 3. Перенаправление ввода/вывода и конвейеры
- 3.ЧТО ДОЛЖЕН ЗНАТЬ НЕ ТОЛЬКО СИСАДМИН
- 1. Начало работы и внешний вид FAR
- 2. Основные операции FAR Manager
- 3. Дополнительные возможности FAR
- 2.3. Перенаправление ввода/вывода и конвейеры
- Таблица 2.2. Варианты перенаправления ввода/вывода и конвейеров
- ECHO [сообщение]
- Пример 2.5. Создание файла перенаправлением стандартного вывода в файл
- ECHO [ON | OFF]
- Пример 2.6. Перенаправление ввода/вывода с консоли и на консоль
- Пример 2.7. Применение конвейера для получения списка текстовых файлов
- Пример 2.8. Применение конвейера и цикла для копирования файлов
- FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «строка» [путь]имя_файла
- FOR /F %переменная IN (файл) DO команда [параметры]
- FOR /F %переменная IN (‘команда’) DO команда [параметры]
- Использование операторов перенаправления команд
- Перенаправление ввода команд ( )
- Использование оператора « search.txt 2 &» для перенаправления ввода и дублирования
- Использование оператора «>>» для добавления вывода
- Использование оператора канала (|)
- Комбинирование команд с операторами перенаправления
- Перенаправление стандартных ввода-вывода и ошибок
Перенаправление ввода-вывода средствами командного интерпретатора ОС
Для автоматизации тестирования выполненных заданий практикума рекомендуется использовать тестовые наборы: заранее подготовленные файлы с входными данными. В случае реализации консольных приложений (считывающих данные с клавиатуры и выдающих результат на экран) использование тестовых наборов достигается путём перенаправления ввода и вывода. Так, в командном интерпретаторе command.exe операционной системы MS DOS (или cmd.exe ОС Windows NT) имеются простейшие операторы перенаправления ввода-вывода: «>» перенаправить вывод в файл, «|» направить вывод одной программы на вход другой.
Стандартные потоки ввода-вывода для пользовательского процесса. | Перенаправление: на вход подан некоторый файл или вывод направлен в некоторый файл. | Перенаправление: на вход подан результат работы некоторого другого пользовательского процесса. |
| | |
Комбинируя операторы перенаправления, можно в итоге получить сложные цепочки потоков ввода-вывода, объединяющие разные процессы и устройства ввода-вывода. Но для выполнения практических заданий для консольных приложений достаточно ограничиться двумя рассмотренными далее случаями.
Чтобы направить содержимое некоторого файла на ввод консольной программы, необходимо распечатать содержимое этого файла с помощью утилиты печати type и перенаправить результат работы type на вход консольной программы. Например, требуется вводить в консольную программу ( prog.exe ) одни и те же данные с минимальными изменениями. Для этого надо создать текстовый файл ( test.txt ), в который поместить тестовый набор («Hello world!»).
Далее, надо выполнить следующую команду:
Если необходимо протестировать взаимодействие двух консольных программ, при котором одна программа готовит текстовые данные для другой, можно использовать оператор «|» (как показано выше). Но в случае, когда требуется вносить изменения в передаваемые данные, можно сохранить прмежуточный результат в файл, откорректировать его и снова направить на вход второй программе. Чтобы направить результат работы некоторой программы ( prog.exe ) в файл ( test.txt ), достаточно написать:
Цикл довузовской подготовки кафедры ЭФУ
- Информатика
- ->
- Операционные системы
- ->
- Практикум «Командная строка WINDOWS»
СТРУКТУРА ПРАКТИКУМА
ЗАДАНИЕ №1
ЗАДАНИЕ №2
ЗАДАНИЕ №3
ЗАДАНИЕ №4
ЗАДАНИЕ №5
ВВЕДЕНИЕ
1. ОСНОВЫ КОМАНДНОЙ СТРОКИ MS WINDOWS
1. Начало работы с командной строкой
2. Структура файловой системы Windows
3. Работа с текстовыми файлами в Cmd.exe
4. Копирование и перемещение файлов и директорий
2. ЭФФЕКТИВНАЯ РАБОТА С КОМАНДНОЙ СТРОКОЙ
1. Полезные инструменты командной строки
2. Настройка параметров командной оболочки
3. Перенаправление ввода/вывода и конвейеры
3.ЧТО ДОЛЖЕН ЗНАТЬ НЕ ТОЛЬКО СИСАДМИН
1. Начало работы и внешний вид FAR
2. Основные операции FAR Manager
3. Дополнительные возможности FAR
2.3. Перенаправление ввода/вывода и конвейеры
Командная оболочка позволяет запускать команды разных типов: встроенные команды, утилиты и приложения, рассчитанные на командную строку. По умолчанию, все они получают ввод из параметров, указываемых при вызове команды, и выводят результат в стандартное окно консоли. Но иногда нужно получить ввод из другого источника либо направить вывод в файл или на другое устройство вывода, например, на принтер или в файл. Более того, в командном интерпретаторе Cmd.exe существуют возможность перенаправить вывод отработавшей команды другим командам, в качестве ввода – это так называемая конвейеризация (piping). Формы перенаправления ввода/вывода проиллюстрированы в Таблице 2.2.
Таблица 2.2. Варианты перенаправления ввода/вывода и конвейеров
№ | Вариант перенаправления | Комментарий |
---|---|---|
1. | команда > [путь]файл | Вывод команды перенаправляется в файл – если такого файла нет, то он создается, а если файл существует, то он перезаписывается. |
2. | команда >> [путь]файл | Вывод команды перенаправляется в файл – если такого файла нет, то он создается, а если файл существует, то данные добавляются в него. |
3. | команда |
Любой из рассмотренных четырех вариантов может рассматриваться как отдельная команда и быть составной частью любого из тех же четырех вариантов.
При построении дерева B (Рис. 5.1) для создания текстовых файлов без помощи Notepad, можно использовать перенаправление стандартного вывода команды ECHO (Пример 2.5), предназначенной для вывода текстовых сообщений в формате:
ECHO [сообщение]
Пример 2.5. Создание файла перенаправлением стандартного вывода в файл
Аналогичным образом предлагается создать файл VASYA2.TXT (Таблица 1.2, Рис. 1.5).
Следует отметить, что команда ECHO используется также для переключения режима отображения команд на экране (ввод ECHO без параметра служит для определения текущего состояния):
ECHO [ON | OFF]
К перенаправлению ввода/вывода можно отнести копирование данных командой COPY с консоли в файл, и из файла на консоль. По умолчанию, устройством ввода консоли является клавиатура, а устройством вывода – экран монитора, в общем случае входные и выходные устройства консоли могут быть переопределены. Системное имя консоли в Windows: CON.
Пример 2.6. Перенаправление ввода/вывода с консоли и на консоль
Когда речь идет о вводе данных, то CON –это клавиатура, а когда о выводе данных, то именем CON обозначается экран монитора. Используя копирование с консоли CON, (Пример 2.6) создадим файлы VASYA3.TXT и VASYA3.TXT как на ветке B (Рис. 1.5, Таблица 1.2).
Перенаправление вывода в файл с добавлением строк: «>>« будет рассмотрено немного позже, теперь же необходимо разобраться с конвейерами команд. Наиболее часто конвейеры используются в задачах поиска и сортировки данных – для этого в основном используются команды: FIND и MORE.
Пример 2.7. Применение конвейера для получения списка текстовых файлов
Команда FIND ищет строки в файлах или в тексте ввода и выводит строки, соответствующие условию. Например, можно получить список всех файлов с расширением «.TXT» в текущем каталоге и его подкаталогах, перенаправив вывод команды DIR на ввод FIND через конвейер (Пример 2.7).
Пример 2.8. Применение конвейера и цикла для копирования файлов
Команда FIND как фильтр текстовых строк в одном или нескольких файлах может применяться в формате:
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] «строка» [путь]имя_файла
/V – Вывод всех строк, НЕ содержащих заданную строку.
/C – Вывод общего числа строк, содержащих заданную строку.
/N – Вывод номеров отображаемых строк.
/OFF[LINE] – Не пропускать атрибут «Автономный».
/I – Поиск без учета регистра символов.
Если путь не задан, то команда FIND выполняет поиск в тексте консоли либо в тексте, переданном по конвейеру другой командой.
В предыдущем примере результаты фильтрации данных (список всех текстовых файлов директории VASYA) направлены в стандартный поток вывода – на экран, поэтому они носят чисто информативный характер. Для того чтобы использовать этот список в практических целях, например для копирования всех файлов директории в один каталог, список должен находиться в файле. Имя такого файла произвольно – для определенности можно дать имя файлу VASYA.LIST (Пример 2.8). Для анализа списка и выполнения операций с его элементами целесообразно использовать простые варианты специализированного цикла FOR в формате (где «переменная», обозначающая строку анализируемого одноэлементного списка может иметь любое имя – например «X»):
FOR /F %переменная IN (файл) DO команда [параметры]
FOR /F %переменная IN (‘команда’) DO команда [параметры]
Используя цикл FOR в формате обработки строк файлов, можно скопировать все текстовые файлы всех подкаталогов директории VASYA в один каталог (Пример 2.8), а затем объединить текстовые файлы (Пример 2.9), применяя перенаправление вывода в файл с добавлением данных: «>>«.
Команда MORE активно используется для перенаправления стандартного ввода и построения конвейеров команд в нижеследующих форматах (список ключей см. § 1.3):
Использование операторов перенаправления команд
Операторы перенаправления команд используются для изменения местоположений потоков ввода и вывода команд, заданных по умолчанию, на какие-либо другие. Местоположение потоков ввода и вывода называется дескриптор.
В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.
Оператор перенаправления | Описание |
---|---|
> | Записывает данные на выходе команды вместо командной строки в файл или на устройство, например, на принтер. |
> | Добавляет выходные данные команды в конец файла, не удаляя при этом существующей информации из файла. |
>& | Считывает данные на выходе одного дескриптора как входные данные для другого дескриптора. |
» будет единица (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 |