
- •Введение
- •Лабораторная работа 1. Определение характеристик ПК
- •Лабораторная работа 2. Системы счисления
- •2.1. Генерация чисел для конвертирования
- •2.3. Двоичная запись
- •2.4. Логические операции над двоичными числами
- •2.5. Восьмеричная запись
- •2.6. Шестнадцатеричная запись
- •2.7. Троичная запись
- •Лабораторная работа 3. Исследование работы операционной системы Microsoft Windows
- •3.1. Проводник Windows, как средство управления файлами
- •3.1.1. Режимы отображения файлов и панелей
- •3.1.2. Просмотр параметров безопасности файлов и папок
- •3.1.3. Ассоциация типов файлов
- •3.1.4. Настройки корзины
- •3.2. Управление задачами
- •3.3. Системный журнал
- •3.4. Переменные окружения
- •3.5. Реестр
- •3.6. Служебные инструменты
- •3.6.1. Штатные инструменты
- •3.6.2. Полезные инструменты различных производителей
- •3.7. Получение снимков окна
- •Лабораторная работа 4. Команды консоли, сценарии
- •4.1. Консоль. Команды и их параметры
- •4.1.1. Загрузка и использование консоли, переключение режимов отображения
- •4.1.2. Получение справки о командах. Параметры команд
- •4.1.3. Системные устройства
- •4.1.4. Команды управления файлами и папками. Абсолютный и относительный путь
- •4.1.5. Маска имени
- •4.1.6. Ассоциация типов файлов командой консоли
- •4.1.7. Операторы использования потоков (создания конвейеров) ввода-вывода и объединения команд*
- •4.1.8. Файловые потоки NTFS*
- •4.2. Сценарии (командные или пакетные файлы)
- •4.3. Сценарии VBS
- •Лабораторная работа 5. Файловые менеджеры, архиваторы, антивирусы
- •5.1. Файловые менеджеры
- •5.1.1. Знакомство с файловыми менеджерами
- •5.1.2. Маски имён документов, группы типов файлов, запуск команд, ассоциации
- •5.1.3. Поиск файлов и папок
- •5.1.4. Управление файловыми операциями с помощью «горячих» клавиш
- •5.1.5. Построение структуры папок и файлов
- •5.1.6. Использование функций просмотра
- •5.1.7. Связи объектов NTFS
- •5.1.8. Подключаемые модули
- •5.2. Архиваторы
- •5.2.1. Знакомство с интерфейсом архиватора
- •5.2.2. Создание архива консольными командами архиватора
- •5.2.3. Создание архива встроенным системным архиватором ZIP
- •5.2.4. Создание архива с помощью оконных архиваторов
- •5.2.5. Сравнение степени сжатия для различных типов файлов и режимов сжатия
- •5.2.6. Создание самораспаковывающегося архива
- •5.2.7. Распаковка архивов архиваторами и файловым менеджером
- •5.2.8. Создание пакета установки на основе самораспаковывающегося архива
- •5.3. Антивирусы
- •Лабораторная работа 6. Сеть
- •6.1. Свойства сетевого соединения
- •6.1.1. Определение характеристик сетевых интерфейсов с помощью оконных инструментов
- •6.1.2. Определение характеристик сетевых интерфейсов с помощью консольных инструментов
- •6.2. Сетевые инструменты
- •6.3. Операции над IPv4-адресом
- •6.3.1. Определение адреса подсети и номера компьютера
- •6.3.2. Использование IP-адреса в различных формах
- •6.4. Сервисы сети интернет
- •6.4.1. Локальные ресурсы
- •6.4.2. Поисковые машины
- •6.4.3. Каталоги
- •6.4.4. Энциклопедии и справочники
- •6.4.5. Подключение к FTP-серверу
- •Лабораторная работа 7. Виртуальные машины
- •7.1. Подготовка к работе
- •7.2. Запуск Linux в качестве гостевой системы
- •7.3. Запуск Microsoft Windows XP в качестве гостевой системы
- •7.4. Подключение внешних ресурсов
- •7.5. Создание снимков виртуальной машины
- •7.6. Исследование сетевых настроек виртуальной машины Windows XP
- •7.7. Консольные команды управления ВМ
- •Лабораторная работа 8. Текстовый редактор. Основные операции с текстом
- •8.1. Папки пользователя для хранения документов
- •8.2. Шрифты
- •8.3. Microsoft Word
- •8.3.1. Интерфейс
- •8.3.2. Сочетания клавиш
- •8.3.3. Новый формат документов
- •8.3.4. Режимы просмотра документа
- •8.3.5. Настройка интерфейса и параметров документа
- •8.3.6. Создание титульной страницы
- •8.3.7. Создание титульной страницы из шаблона
- •8.3.8. Создание и настройка стилей документа
- •8.3.9. Вставка специальных символов
- •8.3.10. Создание списков
- •8.3.11. Работа с таблицами, составление расписания занятий
- •8.3.12. Создание документов с рисунками
- •8.4. LibreOffice Writer
- •8.4.1. Интерфейс
- •8.4.2. Настройка параметров документа
- •8.4.3. Сочетания клавиш
- •8.4.4. Формат документов
- •8.4.5. Создание титульной страницы
- •8.4.6. Создание титульной страницы из шаблона
- •8.4.7. Создание и настройка стилей документа
- •8.4.8. Вставка специальных символов
- •8.4.9. Создание списков
- •8.4.10. Работа с таблицами, составление расписания занятий
- •8.4.11. Создание документов с рисунками
- •Лабораторная работа 9. Текстовый редактор. Вставка формул. Элементы автоматизации
- •9.1. Подготовка к набору технического документа
- •9.2. Набор технического документа
- •9.3. Вставка математических формул
- •9.3.1. Редактор формул MathType для Microsoft Word
- •9.3.2. Встроенный редактор формул Microsoft Word
- •9.3.3. Редактор формул LibreOffice Math
- •9.4. Вставка химических формул
- •9.5. Средства автоматизации и вёрстки MS Word
- •9.5.1. Вставка надписей
- •9.5.2. Нумерация страниц
- •9.5.3. Использование сноски
- •9.5.4. Вставка ссылок на литературные источники
- •9.5.5. Нумерация объектов
- •9.5.6. Построение оглавления
- •9.5.7. Выбор языка для автоматической коррекции текста
- •9.5.8. Ошибки правописания
- •9.5.9. Автозамена
- •9.5.10. Создание календаря
- •9.5.11. Создание рекламного буклета
- •9.5.12. Вставка большой иллюстрации или схемы
- •9.5.13. Разделы
- •9.5.14. Вставка программы VBA, запись и исполнение макросов
- •9.5.15. Программа VBA выравнивание объектов в строке по вертикали
- •9.6. Средства автоматизации и вёрстки LiO Writer
- •9.6.1. Вставка врезки
- •9.6.2. Разрывы текста, разделы
- •9.6.3. Поля, нумерация объектов
- •9.6.4. Нумерация страниц
- •9.6.5. Cноски и примечания
- •9.6.6. Вставка ссылок на литературные источники
- •9.6.7. Построение оглавления
- •9.6.8. Выбор языка для автоматической коррекции текста
- •9.6.9. Ошибки правописания
- •9.6.10. Автозамена и автотекст
- •9.6.11. Создание рекламного буклета
- •9.6.12. Вставка большой иллюстрации или схемы
- •9.6.13. Запись и исполнение макросов
- •9.6.14. Проверка межплатформенной совместимости
- •9.7. Печать брошюры
- •Лабораторная работа 10. Электронные таблицы
- •10.1. Microsoft Excel
- •10.1.1. Интерфейс программы, адресация ячеек
- •10.1.2. Запись данных и формул, адресация, форматирование
- •10.1.3. Примечания
- •10.1.4. Сложные формулы, функции, диапазоны ячеек
- •10.1.5. Фильтрация данных
- •10.1.6. Графическое представление данных
- •10.1.7. Подбор параметра
- •10.2. LibreOffice Calc
- •10.2.1. Интерфейс программы, адресация ячеек
- •10.2.2. Запись данных и формул, адресация, форматирование
- •10.2.3. Примечания
- •10.2.4. Сложные формулы, функции, диапазоны ячеек
- •10.2.5. Фильтрация данных
- •10.2.6. Графическое представление данных
- •10.2.7. Подбор параметра
- •Лабораторная работа 11. Основные операции в пакете инженерных вычислений
- •11.1. PTC Mathcad
- •11.1.1. Интерфейс Mathcad
- •11.1.2. Операции с блоками, имена переменных, формат вывода
- •11.1.3. Единицы измерения
- •11.1.4. Дискретные переменные, массивы
- •11.1.5. Файлы данных
- •11.1.6. Функции
- •11.1.7. Графики
- •11.2. SMath Studio
- •11.2.1. Интерфейс SMath Studio
- •11.2.2. Редактирование
- •11.2.3. Идентификаторы, формат вывода
- •11.2.4. Оптимизация вычислений
- •11.2.5. Функции
- •11.2.6. Единицы измерения
- •11.2.7. Дискретные переменные, массивы
- •11.2.8. Файлы данных
- •11.2.9. Графики
- •Лабораторная работа 12. Инженерные вычисления
- •12.1. PTC Mathcad
- •12.1.1. Поиск корней
- •12.1.2. Решение систем уравнений
- •Системы линейных алгебраических уравнений
- •Использование блока Given/Find для решения систем уравнений
- •12.1.3. Символьные вычисления
- •Оптимизация вычислений
- •Аналитические преобразования
- •Символьные преобразования с ключевым словом
- •Тандемы операторов
- •Поиск экстремума
- •12.1.4. Условный оператор
- •12.1.5. Программирование
- •12.1.6. Компоненты
- •Вставка рисунка
- •Вставка таблицы
- •Использование элементов управления
- •12.1.7. Решение технических задач
- •Решение обратной задачи с использованием функции root()
- •12.2. SMath Studio
- •12.2.1. Поиск корней
- •12.2.2. Решение систем уравнений, функция roots( )
- •12.2.3. Символьные вычисления
- •12.2.4. Строковые операции
- •12.2.5. Программирование
- •12.2.6. Поиск экстремума
- •12.2.7. Вставка рисунка
- •12.2.8. Решение технических задач
- •Решение обратной задачи с использованием функции solve()
- •Лабораторная работа 13. Схемы и презентации
- •13.1. Построение схем в Microsoft Visio
- •13.1.2. Операции с фигурами
- •13.1.3. Соединительные линии
- •13.1.4. Вставка текста
- •13.1.5. Вставка графических элементов
- •13.1.6. Вставка диаграмм
- •13.1.7. Слои
- •13.1.8. Построение блок-схемы алгоритма программы
- •13.1.9. Составление плана помещения
- •13.1.10. Построение технологической схемы
- •13.1.11. Построение электротехнической схемы
- •13.1.12. Создание собственных фигур
- •13.2. Создание схем в LibreOffice Draw
- •13.3. Создание презентаций
- •13.3.1. Microsoft PowerPoint
- •13.3.2. LibreOffice Impress
- •Лабораторная работа 14. Графика. Машинная обработка текстов и изображений
- •14.1. Растровая графика. Обработка фотографий. GIMP
- •14.2. Векторная графика. Inkscape
- •14.2.1. Создание визитной карточки
- •14.2.2. Создание схем
- •14.2.3. Абстракции
- •14.2.4. Создание этикетки
- •14.2.5. Создание календаря
- •14.3. Программы синтеза изображений. Фоторобот
- •14.4. Сканирование
- •14.4.1. Сканирование фотографий
- •14.4.2. Сканирование и векторизация чертежей
- •14.4.3. Сканирование и распознавание текста
- •14.5. Автоматический перевод текста
- •Лабораторная работа 15. 3D графика и мультимедиа
- •15.1. Характеристики медиафайлов
- •15.1.1. Основные характеристики
- •15.1.2. Определение характеристик с помощью MediaInfo
- •15.2. Преобразование файлов в другой формат
- •15.2.1. Кодирование аудио
- •15.2.2. Кодирование видео
- •Литература

4.2. СЦЕНАРИИ (КОМАНДНЫЕ ИЛИ ПАКЕТНЫЕ ФАЙЛЫ)
Сценарии32 (командные (.CMD) или пакетные (.BAT) файлы) предназначены для последовательного выполнения команд, в них содержащихся. Сценарии являются текстовыми и имеют расширение
.CMD (Command). В ранних версиях DOS и Windows сценарии имели расширение .BAT (Batch), в линейке Windows NT (XP, 7…) используется расширенный набор команд, поэтому ввели новый тип, файлы которого не распознаются в старых системах, в новых системах сценарии .BAT выполняются наравне со сценариями .CMD. По умолчанию сценарии интерпретируются в режиме расширенной обработки.
Сценарии запускаются по имени, т.е. для примера, представленного ниже, нужно ввести «C.CMD» и нажать Enter. Сценарии можно запускать без указания расширения: «C», но если система обнаружит несколько исполняемых файлов разных типов с одним и тем же именем, то будет запущен первый найденный файл с учётом списка поиска типов, хранящихся в переменной окружения PATHEXT, т.е. если в этой папке будет файл C.EXE, то будет запущен он, а не C.CMD, так как в списке тип .EXE стоит перед типом .CMD.
Сценарии должны быть созданы (для кириллических версий
Windows) в кодировке 866, которая используется в консоли. Блокнот по умолчанию для текстовых документов использует кодировку 1251 или юникод. Кодировка (866 или 1251) не имеет значения, если сценарии не содержат символов национального алфавита, имеющих различное положение в кодировках. Набранный с использованием национальных алфавитов в блокноте текст в кодировке 1251 при выполнении сценария будет отображаться и выполняться неверно, особенно это касается имён файлов и папок.
Далее все примеры командных файлов запишите в журнал.
Создайте текстовый файл F:\C.CMD, запишите в него следующий перечень команд, затем запустите командный файл:
F: & CD \
MD \A1\B1\C1 \A1\B2\C2 \A1\B2\C3
32 RSDN. Урок bat-аники (http://www.rsdn.ru/?article/winshell/batanyca.xml) Командные файлы (http://white55.narod.ru/cmd.html)
54
DIR /B /OGN C:\WINDOWS\System32\*.EXE >F:\A1\B2\C3\DIR_C.TXT TYPE F:\A1\B2\C3\DIR_C.TXT |MORE
COPY F:\A1\B2\C3\DIR_C.TXT \A1\B1\C1 TREE /F F:\
При выполнении этого сценария отображаются последовательно как сами команды, так и их результаты. Сначала сценарий переходит в корень диска F: (две команды, объединённые &). Затем командой MD (в расширенном режиме) создаётся дерево папок. Причём, если на диске отсутствуют родительские папки для конечной папки списка, то они также создаются, у MD заданы три параметра – папки, которые будут созданы последователь так же, если бы команда MD вызывалась трижды
скаждым из них (разделителем списка могут быть пробел, запятая, точка
сзапятой). Далее сортированный список исполняемых файлов папки в краткой форме сохраняется в файл, который выводится на консоль и копируется в папку C1. В завершении сценария на консоль выводится дерево папок с файлами (ключ /F).
Командные файлы от просто списка команд отличаются возможностью применения простых алгоритмических выражений – условного оператора и цикла, а также возможностью передачи параметров. Для перехода внутри командного файла используется оператор GOTO и метка, которая является именем, начинающимся с двоеточия. Команда ECHO OFF отключает (ECHO ON включает) вывод команд пакетного файла на экран. Символ «@» подавляет вывод текущей команды на экран. Для вывода текста на экран используется команда ECHO с последующей строкой. Командные файлы могут содержать комментарии, которые не выполняются, описывают команды или временно блокируют выполнение команд. Строка комментария начинается командой REM (remark). В сценарии можно использовать локальные переменные и системные переменные окружения. Как было указано ранее, для получения значения переменной, её имя нужно поместить между символами процента. На экран значение переменной можно вывести командой ECHO. Так как символ процента является служебным, он не выводится командой ECHO, для отображения самого символа процента, его нужно дублировать, но записанные вплотную в процентах две переменные выведут объединённую строку без символов процента, несмотря на то,
55
что в строке присутствует последовательность из двух символов процента. Для вывода остальных служебных символов (&, |, >, <) перед ними нужно добавить «^» (каре), этот же символ, записанный последним в строке, переносит строку (продолжение, следующую часть) на следующую строку. Создайте новый файл F:\EH.CMD, запишите в него следующее содержимое и запустите на выполнение:
@ECHO OFF
ECHO Windows установлена в папку %windir%
ECHO %%HOMEDRIVE%%%%HOMEPATH%% --^> %HOMEDRIVE%%HOMEPATH%
Сценарии поддерживают работу с аргументами командной строки (аргументы записываются после имени, разделяемые пробелами, если в аргументе, например, в имени, присутствуют пробелы, то аргумент помещается в двойные кавычки). Внутри сценария доступ к аргументам осуществляется по номеру %0—%9. Аргумент %0 содержит имя и абсолютный путь самого сценария. Если аргументов больше, чем девять, то используется команда SHIFT, которая сдвигает аргументы на один влево, т.е. нулевой аргумент теряется, первый становится нулевым, второй первым и т.д. Перебрать все аргументы без использования сдвига позволяет оператор цикла FOR.
В сценариях можно обращаться как к глобальным переменным окружения, так и создавать собственные. Команда SET имя=значение задаёт значение переменной, команда SET /A выражение позволяет производить вычисления, а команда SET /P переменная=подсказка позволяет по ходу действия сценария ввести пользователю в консоли значение переменной (см. SET /?).
Для исследования работы сценариев с параметрами ниже рассмотрены варианты сценариев – аналогов команды (создание структуры папок):
MD \K2 & CD \K2 & MD A1 A2 A3 B1\C1 G2\E2 V3\X3\N3
Создайте файл F:\MT1.CMD с содержимым:
@ECHO OFF
CLS
MD \K2 :START
IF "%1"=="" GOTO END
56
MD "\K2\%1"
SHIFT GOTO START :END
TREE F:\
Запустите этот командный файл с параметрами:
F:\MT1.CMD A1 A2 A3 B1\C1 G2\E2 V3\X3\N3
Вы увидите, что отобразится дерево каталогов, в которое были добавлены структуры папок из перечня. Рассмотрите структуру командного файла. В файле присутствуют две метки – START и END, определяющие положение начала и окончания цикла. Оператор IF проверяет, задан ли первый параметр (оператором сравнения является два символа равенства «=»). Если параметр пуст, то производится переход на метку выхода. В теле цикла выполняется создание папки с именем, содержащимся в первом параметре в папке K2, затем командой SHIFT производится сдвиг параметров (второй параметр становится первым), и так продолжается до исчерпания параметров, пока первый параметр станет пустым. Для организации цикла в конце тела цикла производится переход на начало цикла командой GOTO START. После окончания цикла выводится дерево папок для контроля выполнения. Для рассмотрения следующего метода нужно очистить созданную структуру, выполните команду RD /S /Q \K2, запишите этот же сценарий с помощью оператора цикла под именем MT2.CMD:
@ECHO OFF
CLS MD K2
FOR %%i IN (%*) DO MD "K2\%%i"
TREE F:\
Запустите командный файл с параметрами:
F:\MT2.CMD A1 A2 A3 B1\C1 G2\E2 V3\X3\N3
Оператор FOR (см. FOR /?) позволяет перебрать список (аргументы, строки текстового файла, папки), помещая последовательно значения элементов в счётчик цикла, который обозначается одной латинской буквой (регистр большие/маленькие учитывается), перед которой стоит
два значка процента (%%i), с помощью модификаторов значение
57
переменной-счётчика цикла можно преобразовывать (см. FOR /?). После слова IN в скобках идет список аргументов (так как начинается с процента), в списке находятся все аргументы (маска *). После слова DO помещена команда, которую нужно выполнить для каждого значения счётчика цикла. В конце сценария для контроля выводится дерево папок.
Использование цикла позволяет решить следующую административную задачу: необходимо очистить папку временных файлов (при загрузке назначаемого профиля). Казалось бы, простая задача, но штатные команды DEL и RD не могут с ней справиться. Команда DEL может удалить все файлы, включая расположенные в подпапках (DEL /S /Q %TMP%\*), но сами папки при этом остаются. Команда RD справилась бы с задачей (RD /S /Q %TMP%), удалив папку со всем содержимым, но саму временную папку удалять нельзя. Можно записать универсальный сценарий ClFo.CMD (Clear Folder), который для заданной папки сначала в цикле удалит все подпапки с содержимым, затем все оставшиеся файлы и сценарий ClTMP.CMD (Clear TMP), который вызывает ClFo для папки временных файлов. В связи с высокой деструктивной способностью эти сценарии можете рассмотреть, но не набирать без надобности. Сценарий ClFo.CMD:
@ECHO OFF
REM Сценарий ClFo
IF "%1"=="" GOTO HELP IF "%1"=="/?" GOTO HELP
IF /I "%2"=="/R" ATTRIB –R –S –H "%~1\*" /S /D
REM Перебрать и удалить все подпапки во временной папке
FOR /D %%i IN (%1\*) DO RD /S /Q "%%i"
REM Удалить все оставшиеся файлы
DEL /S /Q /F %1\*
EXIT /B :HELP
ECHO Удаляет содержимое указанной папки ECHO Запуск: %~n0 имя_папки [/R]
ECHO Необязательный ключ /R позволяет удалять
ECHO файлы с атрибутами R/O, System, Hidden
И сценарий ClTMP.CMD:
@ClFo %TMP% /R
58

В сценарии ClFo сначала производится проверка на отсутствие аргумента или его соответствие «/?», в случае выполнения условия производится переход к области вывода справки о запуске сценария. В случае если планируется очищать папки, от файлов с атрибутами только чтение, скрытый, системный, то ключом /R в условном операторе IF командой ATTRIB производится сброс служебных атрибутов, ключ /I у оператора IF позволяет игнорировать регистр сравниваемый строк, поэтому можно одинаково использовать ключи /R или /r. Вставка в параметр %2 символа «~» %~2 удаляет обрамляющие кавычки, так как к строке добавляется подстрока и результат берётся в кавычки, иначе кавычки будут внутри пути. Оператор цикла FOR использует ключ /D, который указывает воспринимать все подстановочные знаки (*) в списке как папки, в результате в счётчик цикла будут присвоены по очереди имена всех подпапок (в папке, описанной первым аргументом), которые последовательно будут удалены командой RD. На случай, если какую то из подпапок не удалось удалить, команда DEL удаляет не только оставшиеся файлы в указанной папке, но в подпапках, если таковые имеются, что обеспечивает максимальное освобождение дискового пространства. В команде ECHO используется вывод аргумента %0 с расположенным между знаком процента и номером модификатором ~n, который выделяет из значения имя файла (см. CALL /?). Модификаторы параметра или счётчика цикла вставляются в них между символом процента и цифрой параметра или буквой имени счётчика цикла, список модификаторов приведен ниже в таблице:
~ |
переменная I раскрывается с удалением обрамляющих |
|
кавычек (") |
~f |
(Fullpath) переменная раскрывается в полное имя файла |
~d |
(Disk) переменная раскрывается в букву диска |
~p |
(Path) переменная раскрывается в путь |
~n |
(Name) переменная раскрывается в имя файла |
~x |
(eXtension) переменная раскрывается в расширение файла |
~s |
(short) раскрытый путь содержит только короткие имена |
~a |
(Attribute) переменная раскрывается в атрибуты файла |
~t |
(Time) переменная раскрывается в дату/время файла |
~z |
(siZe) переменная раскрывается в размер файла |
|
59 |

~$PATH: проводится поиск по каталогам, заданным в переменной среды PATH, и переменная раскрывается в полное имя первого найденного файла. Если указанная переменная среды не определена или в результате поиска не найден ни один файл, то этот модификатор заменяется на пустую строку.
При объединении модификаторов (тильда ~ вставляется один раз спереди) получаются комбинированные результаты: %~dp0 – переменная %1 заменяется только на имя диска и путь (в данном случае вернёт полный путь к файлу сценария, так как полный путь сценария содержится в параметре %0), %~nx1 – переменная %1 заменяется только на имя файла и его расширение. Модификаторы не могут использоваться вместе с оператором %* (все параметры).
Очистите структуру командой RD /S /Q \K2, запишите и рассмотрите сценарий создания дерева папок под именем MT3.CMD, который демонстрирует использование подпрограмм:
@ECHO OFF
CLS MD K2
FOR %%i IN (%*) DO CALL :MD "K2\%%i"
TREE F:\
EXIT /B :MD
MD %1
EXIT /B
Запустите командный файл с параметрами:
F:\MT3.CMD A1 A2 A3 B1\C1 G2\E2 V3\X3\N3
Подпрограмма – часть сценария, к которой можно многократно обращаться. Команда CALL используется для вызова других сценариев или подпрограмм внутри текущего сценария с возможностью передачи параметров. Подпрограмма вызывается по метке (метка начинается с двоеточия и обозначает позицию в сценарии, заметьте, то у оператора GOTO перед меткой двоеточие не ставится, т.к. GOTO работает только с метками, а CALL должен различать объект вызова – метку или внешний файл). Подпрограмма ведёт себя как отдельный сценарий, у неё своё окружение и параметры, так, первый параметр %1 при старте сценария
60
содержит данные, передаваемые при запуске сценария, внутри подпрограммы %1 (MD %1) данные, переданные оператором CALL после метки в командной строке ("K2\%%i", где счётчик цикла %%i заменяется конкретным значением). При выходе из подпрограммы оператором EXIT /B управление передаётся оператору, следующему за оператором CALL, вызвавшем подпрограмму. Использование оператора EXIT /B в основном тексте сценария завершает работу сценария.
Внутри сценария может использоваться команда PAUSE, которая останавливает работу сценария, выводит сообщение о необходимости нажатия клавиши для продолжения и ожидает нажатие клавиши. Часто PAUSE используется в сценариях, действие которых может нести деструктивные действия. Если пользователь запустил сценарий случайно, то в режиме паузы сценарий можно завершить клавишами Ctrl+C или
Ctrl+Break.
Для контроля ошибок используется переменная ERRORLEVEL – после выполнения команды содержит код ошибки (0, если ошибки нет). DATE и TIME – соответственно возвращают текущую дату и время. В качестве примера создайте файл F:\VAR.CMD, содержащий следующий текст:
@ECHO OFF
SET DP=%DATE%
IF NOT EXIST "\%DP%" MD "\%DP%" ECHO %TIME%>"\%DP%\PROC.TXT" TaskList /svc >> "\%DP%\PROC.TXT"
Запустите команду VAR. Если в корне диска F: отсутствует (IF NOT EXIST) папка, именем которой является текущая дата, то она создаётся, в ней создаётся файл PROC.TXT, в который записывается текущее время и дописывается информация об активных процессах системы. В сценарии имя папки хранится в переменной DP. Часто значение переменной DATE используется для создания папки сохранения состояния программ и/или архива текущего состояния документов. Формат даты по умолчанию (ДД.ММ.ГГГГ – день.месяц.год: 01.10.2013) неудобен для создания папок, так как при отображении сортированного списка подобных папок или файлов они будут расположены не в хронологическом порядке. Удобнее использовать формат даты ГГГГ.ММ.ДД (2013.10.01) или
61
краткий ГГММДД (131001), в этом случае сортированный список будет расположен в хронологическом порядке. Формат записи локальных переменных позволяет извлекать подстроку или заменять в строке одну подстроку другой (см. SET /?). Если %имя% возвращает значение переменной имя, то запись %имя:str1=str2% вернёт новую строку, которая образована из значения имя, в котором все вхождения подстроки str1 заменены на str2. Для извлечения части строки используется формат
%имя:~позиция,количество%, где позиция – количество пропускаемых символов значения переменной имя (может быть равно 0), а количество – количество возвращаемых символов. Если значение позиция отрицательно (нет –0, нумерация с единицы), то стартовый символ вычисляется с конца строки справа налево (но подстрока извлекается от позиции слева направо!). Если значение количество не указано, то извлекается подстрока до конца строки. Если количество отрицательно, то значение обозначает «кроме последних n символов», если с минусом указано абсолютное значение больше, чем символов в подстроке с позиции, то возвращается пустая строка. Создайте и запустите сценарий
VAR1.CMD:
@ECHO OFF
SET D0=%DATE%
SET D1=%D0:~6%%D0:~2,4%%D0:~0,2%
SET D2=%D0:~8%%D0:~3,2%%D0:~0,2% SET T=%TIME::=-%
SET T=%T:~0,-3%
ECHO %D0%
ECHO %D1%
ECHO %D2%
ECHO %T%
MD %D1%
ECHO Активен сеанс пользователя %USERNAME% > %D1%\%T%.TXT
В сценарии VAR1 переменной D0 присваивается строка значения текущей даты (например, 01.10.2013). Переменной D1 присваивается строка из трёх подстрок: %D0:~6% все символы после шестого (год) + %D0:~2,4% четыре символа, пропустив два (номер месяца с точками) + %D0:~0,2% два символа с начала строки (день). Аналогично составляется значение переменной D2 для даты в краткой форме. Нельзя создавать
62