Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа №2 «Программирование командных BAT-файлов в Windows»Стр 1 из 2Следующая ⇒
Лабораторная работа №2 «Программирование командных BAT-файлов в Windows» ТЕОРИЯ Переменные окружения При загрузке ОС Windows в оперативной памяти постоянно хранится набор т.н. переменных окружения (environment variables). Хотя в Windows есть более совершенный способ для хранения системных значений – реестр, многие программы по-прежнему используют переменные окружения. Наиболее важные переменные хранят системный путь для поиска (PATH), каталог запуска Windows (WINDIR), место хранения временных файлов (TEMP). Переменные устанавливаются с помощью команды SET [переменная=[строка]] Запуск SET без параметров приводит к выводу списка переменных среды. Для получения их значений (всегда строки) нужно имя соответствующей переменной заключить в символы «%», например: %TEMP%. Основные команды Остановимся подробнее на командах работы с файловой системой: ATTRIB, CD, COPY, XCOPY, DIR, MKDIR, RMDIR, DEL, DELTREE, REN, MOVE, SUBST, VOL, LABEL. ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [[диск:][путь]имя_файла] [/S] Используется для просмотра или установки атрибутов файлов. В Windows 9x можно использовать 4 атрибута: Read-Onlу (R) – только для чтения; System (S) – системный; Archive (A) – архивный; Hidden (H) – скрытый. Установка атрибута производится ключом «+», снятие – «-». Ключ «/S» применяется для обработки файлов во всех подкаталогах указанного пути. Например, сделать все Word-файлы в каталоге «Мои документы» доступными только для чтения: ATTRIB +R “C:\Мои документы\*.doc”. Атрибуты фалов можно просмотреть/поменять в файловых менеджерах или проводнике (пункт «Свойства» в контекстном меню по правой клавише). CHDIR (CD) [диск:] [путь\] Текущий каталог можно изменить с помощью команды CD. Например, переход в корневой каталог диска – CD \, на уровень выше – CD.., в каталог «Мои документы» - CD ”\Мои документы”. В Windows NT с помощью ключа /D можно сменить не только текущий каталог, но и диск, например: CD /D D:\Texts. Кроме того, в Windows NT можно не заключать имена длинных каталогов в кавычки – CD.\Мои документы. COPY [/A | /B] источник [/A | /B] [+источник [/A | /B] [+ …]] [результат [/A | /B]] [/V] [/Y | /-Y] Наиболее часто используемая команда для копирования одного или нескольких файлов. Описание ключей сведено в таблицу:
Действие ключа /B означает копирование всего файла побайтно, а ключ /A приводит к копированию только данных, предшествующих первому символу конца файла. В качестве источника или результата при копировании можно указывать имена не только файлов, но устройств компьютера:
PRN – принтер, LPT1-LPT3 – соответствующие параллельные порты; AUX – устройство, присоединяемое к последовательному порту 1; COM1-COM3 - соответствующие последовательные порты; CON – терминал (при вводе – это клавиатура, а при выводе – монитор); NUL – пустое устройство (все операции игнорируются). Например, для печати файла на принтере можно ввести команду COPY abc.txt PRN, для создания файла COPY CON my.txt (для конца файла ввести <CTRL>+<Z>). Команда COPY может объединять (склеивать) несколько файлов путем использования групповых знаков «*» и «?» (COPY /B *.dat all.dt) или знака конткатенации «+» (COPY /B 1.txt+2.txt 3.txt). Здесь ключ /B используется для предотвращения усечения соединяемых файлов, т.к. по умолчанию файлы считаются текстовыми. Среди недостатков команды COPY надо отметить невозможность копирования скрытых системных файлов, замены файлов с атрибутом «Read Only», а также копирования открытых (занятых) файлов (в этом случае процесс просто прерывается). Некоторые из этих проблем можно решить с помощью утилиты XCOPY. XCOPY источник результат [/A | /M] [/D[:дата]] [/P] [/S [/E]] [/W] [/C] [/I] [/Q] [/F] [/L] [/H] [/R] [/T] [/U] [/K] [/Y | /-Y] Команда XCOPY работает только с файлами и каталогами (а не с устройствами). Используемые ключи рассмотрим в табличном виде:
При использовании команды XCOPY внутри пакетных файлов по переменной ERRORLEVEL (см. в след. разделе) можно анализировать код выхода (завершения) команды (0 – без ошибок, 1 – файлы не найдены, 2 – прерывание по <CTRL>+<C>, 4 – не хватает места, ошибка в назначении или синтаксисе, 5 – ошибка записи на диск).
DIR [диск:][путь][имя_файла] [/A[[:]атрибуты]] [/B] [/C] [/D] [/L] [/N] [/O[[:]порядок]] [/P] [/Q] [/S] [/T[[:]время]] [/W] [/X] [/4] Выводит информацию о содержимом дисков и каталогов. При использовании без ключей выводит метку диска, имена (в коротком и длинном вариантах) файлов и подкаталогов, находящихся в текущем подкаталоге, а также дату и время их последней модификации. В завершении выводится общее число файлов в каталоге, их объем и размер свободного пространства. Ключи команды DIR позволяют задать различные режимы расположения, фильтрации и сортировки выводимой информации:
Стандартный набор ключей можно записать в переменную среды DIRCMD. Для отмены их действия введите в команде те же ключи с префиксом "-", например: /-W. Команда DIR (так же как и другие) поддерживает перенаправление ввода-вывода (символы «>» и «>>»), например команда:
DIR “C:\Мои документы” /W/O:N > PRN выполняет печать в широком формате в алфавитном порядке на принтер. MKDIR (MD) [диск:]путь RMDIR (RD) [диск:]путь Применяются соответственно для создания нового каталога и удаления существующего пустого каталога. Команда MKDIR не будет выполнена, если каталог или файл с заданным именем уже существуют, а RMDIR – если удаляемый каталог не пустой. В Windows NT появилась возможность удалять подкаталоги (RD /S), и создавать полный путь – MD \A\B\C\D. DEL [диск:][путь]имя_файла [/P] ERASE [диск:][путь]имя_файла [/P] Удаляют один или несколько файлов. Ключ /P означает выдачу запроса на удаление (при задании удаления всех файлов DEL *.* или DEL. запрос будет всегда). В Windows NT добавлены параметры для удаления файлов с атрибутом «Только для чтения» (/F), подкаталогов (/S), отмены подтверждений (/Q), а также удаления файлов, не имеющих заданных атрибутов (/A:атрибуты). DELTREE [/Y] [диск:]путь Используется для удаления каталога вместе со всеми подкаталогами и файлами. Ключ /Y используется для отключения запроса на подтверждение. RENAME (REN) [диск:][путь][каталог1 |файл1] [каталог2 | файл2] Переименовывает файлы или каталоги. Так же как и в команде DEL можно использовать групповые символы «*» и «?», например: REN *.txt *.doc. В этой команде нельзя указать другой диск или каталог для результата – для этих целей надо использовать команду MOVE.
MOVE [/Y | /-Y] [диск:][путь]имя_файла1[,…] рез_файл MOVE [/Y | /-Y] [диск:][путь]каталог1 каталог2 Эта команда перемещает и переименовывает файлы или каталоги. SUBST [диск1: [диск2:]путь] Сопоставляет заданному пути имя виртуального диска. Часто нужно для инсталляции программ (эмуляции корневого каталога CD). Например: SUBST F: C:\INSTALL\DELPHI5. Ключ /D используется для удаления ранее созданного виртуального диска: SUBST F: /D. SUBST без параметров выводит текущий список виртуальных дисков (нельзя назначать их на сетевые каталоги). VOL [диск:] LABEL [диск:][метка] Команды выводят и задают метку тома.
Командные bat-файлы Командный (пакетный) файл в Windows 9x – это обычный текстовый файл с расширением bat, в котором записаны допустимые команды ОС, а также некоторые инструкции (ключевые слова) для алгоритмизации действий. Например, deltmp.bat удалит все временные файлы в каталоге Windows\Temp: C: \ CD %TEMP% ATTRIB –R *.tmp DEL *.TMP Основной командой для вывода информации в пакетных файлах служит: ECHO [сообщение] С учетом перенаправления может выводить сообщения куда угодно (порты, принтер и т.п.). Например, ECHO Привет! > hi.txt направляет сообщение в текстовый файл. По умолчанию команды пакетного файла перед исполнением выводятся на экран, что не очень эстетично. С помощью команды ECHO OFF можно отключить дублирование вывода команд на экран. ECHO ON восстанавливает режим дублирования. Кроме этого, можно отключить дублирование отдельной строки, если предварить ее символом «@». И, наконец, может вывести пустую строку комбинацией ECHO. (с точкой в конце). @ECHO OFF ECHO Привет! ECHO. ECHO Пока … При запуске командных файлов в командной строке можно указывать произвольно е число параметров, которые затем можно использовать внутри пакетного файла. Для доступа к параметрам применяются символы %0 – имя файла, %1-%9 – значения первых девяти параметров соответственно. Например, имеется командный файл copier.bat следующего содержания: @ECHO oFF CLS ECHO Файл %0 копирует каталог %1 в %2 XCOPY %1 %2 /S При запуске его из командной строки с 2 параметрами: copier.bat C:\Programs D:\Backup на экран выводится сообщение «Файл copier.bat копирует каталог C:\Programs в D:\Backup» и происходит соответствующее копирование. При необходимости можно использовать более девяти параметров командной строки с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий. Значение %1 – в %0, %2 в %1 и т.д., 10 параметр в %9. Команда, обратная SHIFT, отсутствует, поэтому восстановить параметры уже не удастся. Кроме того, в командных файлах можно использовать переменные окружения и объявлять собственные с помощью команды SET. Все переменные рассматриваются как строки и в Windows 9x над ними нельзя производить арифметические действия (в отличие от NT), а только конкатенацию (просто слитно 2 переменные без знака «+»). Например, в результате выполнения командного файла: SET A=Первый SET B=Второй SET C=%A%%B% ECHO Переменная С=%С%
на экран выведется «Переменная С=ПервыйВторой». Для управления выполнением командных файлов существуют команды приостановки, перехода, условного ветвления, циклов и вызова внешних командных файлов. Для того, чтобы прервать выполнение командного файла, надо нажать <CTRL> +<C> или <CTRL>+<Break> (в Windows NT есть команда выхода EXIT /B). Для приостановки с выдачей запроса на нажатие любой клавиши есть команда PAUSE, которую рекомендуется использовать перед выполнением потенциально опасных действий. Например: ECHO Сейчас будут удалены все файлы в каталоге C:\Мои документы PAUSE DEL “C:\Мои документы\*.*” Для организации циклов используется конструкция: FOR %%переменная IN ( множество ) DO команда [параметры] Отличие от классических языков программирования в том, что не происходит регулярного приращения счетчика, а вместо этого используется заданный список значений в параметре множество. Скобки здесь обязательны, внутри которых одно или несколько строковых значений, разделенных запятыми. Например: @ECHO OFF FOR %%i IN (Раз, Два, Три) DO ECHO %%i напечатает следующее: Раз Два Три В качестве переменных цикла можно использовать лишь имена, состоящие из одной буквы. Как видите, нет командных скобок (типа begin end), поэтому весь цикл должен быть записан в одной строке, вложенные циклы не допускаются. В параметре множество можно представить одну или несколько групп файлов. Например, для вывода всех файлов с расширениями *.doc и *.txt: FOR %%f IN(C:\TEXT\*.doc C:\TEXT\*.prn) DO ECHO %%f >> list.txt Из одного командного файла можно вызвать другой просто указав его имя. Однако в этом случае управление назад не вернется, для этого существует команда CALL, с помощью которой можно в командных файлах организовать подобие подпрограмм. Например, командный файл proc.bat: @ECHO OFF ECHO Записываем файл %1.txt ECHO Параметр вызова: %1 > %1.txt можно вызвать в другом пакетной файле: FOR %%i IN (Первый, Второй, Третий) DO CALL proc.bat %%i в результате proc.bat вызывается 3 раза и создает 3 файла – Первый. txt, Второй. txt и Третий.txt с соответствующим текстом. Командный файл может содержать метки, начинающиеся с двоеточия («:») и команды GOTO перехода к этим меткам. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Например: @ECHO OFF GOTO Label1 REM Продолжение выполнения DIR C помощью команды IF в пакетных файлах можно выполнять обработку условий 3 типов: 1) IF [NOT] строка1==строка2 команда Условие считается истинным (обратите внимание на 2 знака равно) при точном совпадении обеих строк (регистр имеет значение). Строки могут быть литеральными (кавычки для них не требуются) или представлять значения переменных. Например: IF %1%==Петя ECHO Привет, Петя! Для предотвращения синтаксических ошибок в случае отсутствия переменных или параметров, рекомендуется при сравнении строк приписывать им вначале какой-нибудь символ, например: IF -%MyVar%==-C:\ ECHO OK! 2) IF [NOT] EXIST файл команда Проверка существования заданного файла (кавычки для имени также не требуются, кроме длинных). Например: IF NOT EXIST C:\autoexec.bat ECHO У вас нет файла автозагрузки! IF EXIST “C:\Мои документы\Работа.doc” ECHO Все в порядке! 3) IF [NOT] ERRORLEVEL число команда Условие считается истинным, если последняя запущенная программа или команда завершилась с кодом возврата, равным либо превышающим указанное число. Например: xcopy my.txt c:\ > nul Goto EndBatch :ErrOccurred echo При выполнение команды возникла ошибка! :EndBatch К сожалению, в командных файлах нет возможности организовать полноценный диалог с пользователем путем ввода строк с клавиатуры. Единственное средство – команда CHOICE, которая выводит подсказку и ждет выбора пользователем варианта из указанного набора клавиш. CHOICE [/C[:]варианты] [/N] [/S] [/T[:]c,nn] [текст]
Если в команде не задается текст, то пользователь видит на экране только подсказку. Рассмотрим подробно ключи этой команды:
После выполнения команды CHOICE переменная ERRORLEVEL приобретает значение, равное номеру варианта ответа, что позволяет использовать команду IF для организации ветвления. Если происходит ошибка, CHOICE возвращает 255, прерывание по <CTRL>+<C> или < CTRL >+<Break> - 0. В качестве примера рассмотрим простейшее меню: @ECHO OFF ECHO Выберите режим ECHO 1 - Простой ECHO 2 - Расширенный ECHO. ECHO Выход из меню GOTO Done :Choice1 ECHO Выбран пункт 1 GOTO Done :Choice2 ECHO Выбран пункт 2 GOTO Done :Done BAT-файлы Если Вам требуется последовательно запускать несколько программ Windows, то Вы можете написать для этого.bat файл. Используйте команду START с ключом /W. Например создайте текстовый файл со следующим текстом: @START /W /MAX "C:\WINDOWS\SCANDSKW.EXE /A /N" @START /W /MAX "C:\WINDOWS\DEFRAG.EXE /ALL /F /NOPROMPT" И сохраните его как 1.bat (обратите внимание на кавычки!). Кроме /W, Вы можете использовать следующие ключи: /M Запускает программу минимизированно /MAX Запускает программу, развернув на весь экран /R Запускает программу в окне (используется по умолчанию) Передача параметров в bat-файл. Для того чтобы bat-файл можно было запускать с какими-то параметрами надо в том месте файла, куда вы хотите добавить параметр, набрать %1 - для первого параметра, %2 - для второго и т.д. Например (файл test.bat): /тут идут какие-то /..... /подготовительные работы rar m file%1 Теперь если вы запустите этот файл командой "test.bat 0001", то у вас будет создан файл с именем file0001.rar Как автоматизировать ответы на запросы? Большинство команд не требуют подтверждения действий, но есть и такие, как например требование ввести пароль для запуска программы, где должен быть задействован пользователь. Чтобы система отвечала на запросы автоматически: echo <password> | logon harchenko При этом запускается команда "logon harchenko", которая вводит пароль в ответ на сответствующее требование системы УПРАЖНЕНИЯ 1. Пусть имеется текстовый файл protokol.txt, в котором хранится журнал обработанных файлов в следующем формате: <имя файла> <дата> <время> Слово дата здесь начинается в каждой строке с двадцатой позиции. Необходимо написать командный файл, с помощью которого сделать выборку из этого файла (т. е. создать новый текстовый файл с нужной информацией) за заданный месяц (мм) и год (гггг) в файл ммгггг-.txt, сформированный файл упорядочить по дате обработки. Нужные месяц и год указать как параметры командной строки. Решение: Практически все нужные действия выполняются с помощью конвейеризации команд find и sort: @ЕСНО OFF IF -%1==- GOTO NoParam IF -%2==- GOTO NoParam GOTO End :NoParam ECHO He заданы необходимые параметры командной строки! PAUSE :End
2. Написать командный файл, который будет копировать из текущего каталога все файлы с расширением txt, кроме одного файла, указанного в качестве второго параметра командной строки, в каталог, указанный первым параметром. Если имя каталога, в который должно производиться копирование, не задано, то вывести сообщение об этом и прервать выполнение файла. Решение: Для выполнения поставленной задачи можно перебрать в цикле все файлы с расширением txt, проверяя перед копированием имя каждого из этих файлов: @ЕСНО OFF GOTO End :NoDir ECHO He указан каталог для копирования! PAUSE :End
3. Задание аналогично второму упражнению. Дополнительные требования: а) переписывать только те файлы, которые новее одноименных в каталоге - приемнике, б) не прерывать копирование в случае возникновения ошибки, в) записывать в файл logcopy.txt имя каждого копируемого файла и результат выполнения операции для него. Другими словами, файл logcopy.txt должен быть примерно таким: Успешно: а.txt Ошибка: b.txt Успешно: с.txt Решение: В этом упражнении нужно создать два пакетных файла. В основном файле работает такой же цикл for, как и в предыдущем упражнении, однако вместо непосредственного выполнения команды copy здесь вызывается командный файл 3_1. bat: @ЕСНО OFF GOTO End :NoDir ECHO He указан каталог для копирования! PAUSE :End Вызываемый в цикле файл 3_1.bat имеет следующее содержимое: @ЕСНО OFF REM Копирование файла XCOPY %1 %2 /D /С > NUL GOTO End :Success CLS IF -%1==- GOTO NoDir RЕМ Вывод меню на экран ECHO A - На экран ECHO Б - В файл C:\catalog.txt ECHO В - На принтер CLS ECHO Выбор не был сделан. GOTO End :DirToCon DIR %1 | MORE GOTO End :DirToFile DIR %1 > C:\catalog.txt GOTO End :DirToPrn DIR %1 > prn GOTO End :NoDir ECHO He указан каталог для сканирования! PAUSE :End
ЗАДАНИЯ Разработать пакетный bat-файл. В пакетных файлах предусмотреть сообщение имени, назначения, применения и автора пакетного файла (при пустой командной строке и по ключу /?), контроль верности командной строки, наличие требуемых файлов и сохранность имени пакетного файла. Текущий каталог не изменять, если это специально не оговорено. Там, где необходимо, имена файлов указывать с полным путем и диском. С клавиатуры при работе пакетного файла вводить только числа, строковые данные выбирать либо из меню, либо передавать в командной строке.
ЛИТЕРАТУРА 1. Финогенов Ms-Dos: Самоучитель по системным функциям, Горячая линия-телеком, 2001, 382 стр. 2. Панкратов Операционная система MS-DOS 6.22: Справочное пособие, Познавательная книга плюс, 2001, 224 стр. 3. Губин А. Работа в Ms-Dos для всех: Практическое пособие, Радио и связь, 1993, 160 стр. 4. Франкен Г., Молявко С. MS-DOS 6.2 для пользователя, Киев, BHV, 1994, Москва, БИНОМ, 1994. 5. Фигурнов В. IBM PC для пользователя, г.Уфа, НПО “Информатика и Компьютеры”, 1993. 6. Руководство по программированию под управлением MS DOS:Пер.с фр./Пьеро Ф.,Люкзак Ж.-Л.,Рейко Ф.;Под ред.Пьеро Ф..-М.:Радио и связь,1995.-544с.
Лабораторная работа №2 «Программирование командных BAT-файлов в Windows» ТЕОРИЯ
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-17; просмотров: 571; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.114.38 (0.226 с.) |