Читайте также: |
|
Основы разработки командных (пакетных) файлов в ОС Windows с использованием командной строки
Методические рекомендации и лабораторно-практическая работа по дисциплине «Операционные системы и среды» для студентов II и III курсов
Составители: Куимов В.Н., преподаватель колледжа
Череповец
Содержание
1. | Цель работы | |
2. | Средства обучения | |
3. | Теоретические сведения и методические рекомендации по выполнению лабораторно-практической работы | |
4. | Задание на практическую работу | |
5. | Задание на лабораторную работу | |
6. | Ход работы | |
7. | Рекомендации по оформлению отчета | |
Литература |
Лабораторно-практическая работа
Основы разработки командных (пакетных) файлов в ОС Windows с использованием командной строки
Цель работы
1.1. Изучить порядок разработки командных (пакетных) файлов в ОС Windows.
1.2. Научиться писать командные (пакетные) файлы для выполнения конкретного задания.
Средства обучения
2.1. Методические указания по выполнению лабораторной работы.
2.2. Курс лекций.
2.3. ПЭВМ.
Теоретические сведения и методические указания по выполнению практической работы
Выполнение команды в командной оболочке, инициирует следующую последовательность событий:
1. Командная оболочка заменяет любые переменные, введенные в тексте команд, их текущими значениями.
2. Если введена группа или цепочка из нескольких команд, строка разбивается на отдельные команды, которые в свою очередь разбиваются на имя и аргументы команды. Далее команды обрабатываются по отдельности.
3. Если в имени команды указан путь, командная оболочка ищет команду по этому пути. Если в указанном каталоге такой команды нет, командная оболочка возвращает ошибку.
4. Если в имени команды не задан путь, командная оболочка сначала пытается разрешить имя команды на внутреннем уровне. Если найдена внутренняя команда с таким именем, значит, вызвана внутренняя команда, которую сразу же можно выполнить. Если внутренней команды с таким именем нет, командная оболочка сначала ищет исполняемый файл команды в текущем каталоге, а затем в каталогах, перечне в переменной окружения PATH. Если файла команды нет ни в одном из этих каталогов, командная оболочка возвращает ошибку.
5. Если команда найдена, она выполняется с заданными аргументами и при необходимости ввод считывается из источника, указанного в этих аргументах. Вывод и ошибки команд показываются в окне командной строки или направляются заданному приемнику вывода и ошибок.
Таким образом, на выполнение команд влияют многие факторы, в том числе пути к командам, перенаправление ввода-вывода, группирование или создание цепочек команд.
Сценарии (командные (пакетные) файлы) командной строки ‑ текстовые файлы с командами, которые необходимо выполнить. Это те же команды, которые обычно вводятся в командной оболочке Windows. Однако, вместо того чтобы вводить команды каждый раз, когда они понадобятся, можно создать соответствующий сценарий и упростить себе жизнь.
Поскольку сценарии (командные (пакетные) файлы) состоят из стандартных текстовых символов, их можно создавать и редактировать в любом стандартном текстовом редакторе, скажем, в Notepad (Блокнот). Вводя команды, убедитесь, что каждая команда или группа команд, которые должны выполняться совместно, размещаются с новой строки. Это обеспечит их корректное выполнение. Закончив создание сценария командной строки, сохраните файл сценария с расширением.bat или.cmd. Оба расширения работают одинаково. Например, если вам надо создать сценарий для вывода имени системы, версии Windows и конфигурации IP, включите в файл SysInfo.bat или SysInfo.cmd следующие три команды:
hostname
ver
ipconfig -all
Пакетные параметры командной строки используются в пакетном файле для получения информации о настройках среды.
Файл Cmd.exe разворачивает переменные с %0 по %9. При использовании пакетных параметров переменная %0 заменяется на имя пакетного файла, а переменные с %1 по %9 ‑ на соответствующие аргументы, напечатанные в командной строке. Для доступа к переменным больше %9 запустите команду shift. Для получения дополнительных сведений о команде shift смотрите раздел Shift. Параметр %* ссылается на все аргументы, которые передаются пакетному файлу, за исключением параметра %0.
Например, для копирования содержимого из папки 1 (Folder1) в папку 2 (Folder2), где параметр %1 заменяется на значение Folder1, а параметр %2 ‑ на значение Folder2, в пакетном файле с именем Mybatch.bat введите следующую строку:
xcopy %1\*.* %2
Для запуска файла введите:
mybatch.bat C:\folder1 D:\folder2
Результат будет таким же, как и при записи в пакетный файл строки:
xcopy C:\folder1 \*.* D:\folder2
С пакетными параметрами можно также использовать модификаторы. Модификаторы используют информацию о текущем диске и каталоге как часть или полное имя файла или каталога. Для использования модификатора напечатайте символ (%), затем символ тильды (~), а затем соответствующий модификатор (т.е., %~модификатор).
В следующей таблице описаны модификторы, используемые для расширения.
Модификатор | Описание |
%~1 | расширение %1 и удаление любых кавычек ("") |
%~f1 | замена %1 полным путем |
%~d1 | замена %1 именем диска |
%~p1 | замена %1 путем |
%~n1 | замена %1 именем файла |
%~x1 | замена %1 расширением имени файла |
%~s1 | замена путем, содержащим только короткие имена |
%~a1 | Замена %1 атрибутами файла |
%~t1 | замена %1 датой и временем модификации файла |
%~z1 | замена %1 размером файла |
%~$PATH:1 | поиск в каталогах, перечисленных в переменной среды PATH, замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку |
В следующей таблице даны возможные комбинации модификаторов и квалификаторов для получения более сложных результатов.
Модификатор | Описание |
%~dp1 | замена %1 именем диска и путем |
%~nx1 | замена %1 именем файла и расширением |
%~dp$PATH:1 | поиск в каталогах, перечисленных в переменной среды PATH, и замена %1 именем диска и путем к первому найденному файлу |
%~ftza1 | замена %1 строкой, аналогичной результату работы программы dir |
Примечание
%1 и PATH в показанных выше примерах можно заменить на другие значения пакетных параметров.
Модификатор %* является уникальным, так как он представляет все аргументы, переданные пакетному файлу. Этот модификатор не используется в комбинации с модификатором %~. Конструкция %~ должна завершаться допустимым номером аргумента.
Нельзя манипулировать пакетными параметрами подобно переменным среды. Нельзя искать и заменять значения или контролировать подстроки. Но переменной среды можно назначить параметр, а потом уже ей манипулировать.
Для изменения местоположений потоков ввода и вывода команд, заданных по умолчанию, на какие-либо другие используются операторы перенаправления команд. Местоположение потоков ввода и вывода называется дескриптор.
В следующей таблице описаны операторы перенаправления потоков ввода и вывода команд.
Оператор перенаправления | Описание |
> | записывает данные на выходе команды вместо командной строки в файл или на устройство, например, на принтер |
< | читает поток входных данных команды из файла, а не с клавиатуры |
>> | добавляет выходные данные команды в конец файла, не удаляя при этом существующей информации из файла |
>& | считывает данные на выходе одного дескриптора как входные данные для другого дескриптора |
<& | считывает входные данные одного дескриптора как выходные данные другого дескриптора |
| | считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием «канал» |
По умолчанию, входные данные команды (дескриптор STDIN) отсылаются с клавиатуры интерпретатору команд Cmd.exe, далее Cmd.exe отправляет выходные данные команды (дескриптор STDOUT) в окно командной строки.
В следующей таблице представлены доступные дескрипторы.
дескриптор | Числовой эквивалент дескриптора | Описание |
STDIN | ввод с клавиатуры | |
STDOUT | вывод в окно командной строки | |
STDERR | ошибка вывода в окно командной строки | |
UNDEFINED | 3-9 | эти дескрипторы определяются индивидуально для каждой прикладной программы |
Номера от 0 до 9 представляют первые 10 дескрипторов. Для запуска программы и перенаправления любого из 10 дескрипторов используется интерпретатор команд Cmd.exe. Для задания требуемого дескриптора перед оператором перенаправления введите его номер. Если дескриптор не определен, то по умолчанию оператором перенаправления ввода «<» будет ноль (0), а оператором перенаправления вывода «>» будет единица (1). После ввода оператора «<» или «>» необходимо указать, откуда читать и куда записывать данные. Можно задать имя файла или любой из существующих дескрипторов.
Для задания перенаправления в существующие дескрипторы используется амперсанд (&), затем номер требуемого дескриптора (например, &номер_дескриптора). Например, для перенаправления дескриптора 2 (STDERR) в дескриптор 1 (STDOUT) введите:
1<&2
Оператор перенаправления «&» дублирует выходные или входные данные с одного заданного дескриптора на другой заданный дескриптор. Например, для отправки выводных данных команды dir в файл File.txt и отправки ошибки вывода в файл File.txt введите:
dir>c:\file.txt 2>&1
При дублировании дескриптора происходит копирование всех его исходных характеристик. Например, если дескриптор доступен только для записи, то все его дубликаты будут доступны только для записи. Нельзя продублировать дескриптор с доступом только для чтения в дескриптор с доступом только для записи.
Перенаправление ввода команд (<)
Для перенаправления ввода команд с цифровой клавиатуры на файл или на устройство используйте оператор «<». Например, для ввода команды sort из файла List.txt введите:
sort<file.txt
Содержимое файла File.txt появится в командной строке в виде списка в алфавитном порядке.
Оператор «<» открывает заданное имя файла с доступом только для чтения. Поэтому с его помощью нельзя записывать в файл. Например, при запуске программы с оператором <&2 все попытки прочитать дескриптор 0 ни к чему не приведут, так как изначально он был открыт с доступом только для записи.
Примечание
Дескриптор 0 задан по умолчанию для оператора перенаправления ввода «<».
Перенаправление вывода команд (>)
Выходные данные практически всех команд высвечиваются в окне командной строки. Даже команды, выводящие данные на диск или принтер, выдают сообщения и запросы в окне командной строки.
Для перенаправления вывода команд из окна командной строки в файл или на устройство применяется оператор «>». Этот оператор используется с большинством команд. Например, для перенаправления вывода команды dir в файл Dirlist.txt введите:
dir>dirlist.txt
Если файл Dirlist.txt не существует, интерпретатор команд Cmd.exe создаст его. Если файл существует, Cmd.exe заменит информацию в файле на данные, полученные от команды dir.
Для запуска команды netsh routing dump и последующей отправки результатов ее работы в Route.cfg введите:
netsh routing dump>c:\route.cfg
Оператор «>» открывает заданный файл с доступом только для записи. Поэтому с помощью данного оператора файл прочитать нельзя. Например, при запуске программы с оператором перенаправления <&0 все попытки записать дескриптор 1 ни к чему не приведут, так как изначально дескриптор 0 был открыт с доступом только для чтения.
Примечание.
Дескриптор 1 задан по умолчанию для оператора перенаправления вывода «>».
Использование оператора «<&» для перенаправления ввода и дублирования
Для использования оператора перенаправления ввода необходимо, чтобы задаваемый файл уже существовал. Если файл для ввода существует, то интерпретатор команд Cmd.exe открывает его с доступом только для чтения и его содержимое отправляет в команду так, как если бы это был ввод с цифровой клавиатуры. При задании дескриптора интерпретатор команд Cmd.exe дублирует его в дескриптор, существующий в системе.
Например, для считывания файла File.txt на вход в дескриптор 0 (STDIN) введите:
<file.txt
Для открытия файла File.txt, сортировки его содержимого и последующей отправки в окно командной строки (STDOUT) введите:
sort<file.txt
Для того чтобы найти файл File.txt и перенаправить дескриптор 1 (STDOUT) и дескриптор 2 (STDERR) в Search.txt введите:
findfile file.txt>search.txt 2<&1
Для дублирования определенного пользователем дескриптора 3 в качестве входной информации для дескриптора 0 (STDIN) введите:
<&3
Использование оператора «>&» для перенаправления ввода и дублирования
При перенаправлении вывода в файл и задании существующего имени файла интерпретатор команд Cmd.exe открывает файл с доступом только для записи и переписывает его содержимое. Если дескриптор задан, интерпретатор команд Cmd.exe дублирует файл в существующий дескриптор.
Для дублирования определенного пользователем дескриптора 3 в дескриптор 1 введите:
>&3
Для перенаправления всех выходных данных, включая выходные данные дескриптора 2 (STDERR), команды ipconfig в дескриптор 1 (STDOUT) и последующего перенаправления выходных данных в Output.log введите:
ipconfig.exe>>output.log 2>&1
Использование оператора «>>» для добавления вывода
Для добавления выходных данных команды в конец файла без потери хранящейся в нем информации используется двойной символ «больше» (>>). Например, следующая команда добавляет список каталогов, созданный командой dir, в файл Dirlist.txt:
dir>>dirlist.txt
Для добавления выходных данных команды netstat в конец файла Tcpinfo.txt введите:
netstat>>tcpinfo.txt
Использование оператора канала (|)
Оператор канала «вертикальная линия» (|) забирает выходные данные одной команды (по умолчанию STDOUT) и направляет их на вход другой команды (по умолчанию STDIN). Например, следующая команда сортирует каталог:
dir | sort
В данном примере обе команды запускаются одновременно, но команда sort приостанавливает работу до получения выходных данных команды dir. Команда sort использует выходные данные команды dir в качестве своих входных данных, а затем свои выходные данные отправляет в дескриптор 1 (STDOUT).
Комбинирование команд с операторами перенаправления
Комбинируя команды-фильтры с другими командами и именами файлов, можно создавать команды на заказ. Например, для сохранения имен файлов, содержащих строку «LOG», используется следующая команда:
dir /b | find "LOG" > loglist.txt
Выход команды dir отсылается в команду-фильтр find. Имена файлов, содержащие строку «LOG», хранятся в файле Loglist.txt в виде списка (например, NetshConfig.log, Logdat.svd и Mylog.bat).
При использовании более одного фильтра в одной команде их необходимо отделять с помощью канала (|). Например, следующая команда ищет в каждом каталоге диска C файлы, в названии которых присутствует строка «Log», и выводит их постранично на экран:
dir c:\ /s /b | find "LOG" | more
Наличие канала (|) указывает Cmd.exe, что выход команды dir нужно отправить команде-фильтру find. Команда find выбирает только те имена файлов, в которых содержится строка «LOG». Команда more выводит на экран имена файлов, полученные командой find с паузой после заполнения каждого экрана. Сведения о командах-фильтрах см. в разделе Использование фильтров.
Следует отметить, что ряд команд имеет определенные ограничения при использовании, в частности: наличие определенной ОС (Windows XP, Windows 2000, …), наличие пакета дополнительных команд и т.д., поэтому перед использованием той или иной команды целесообразно ознакомиться с ее подробным описанием.
Дата добавления: 2015-08-27; просмотров: 39 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пример библиографического описания книги | | | Задание на практическую работу |