Использование параметров командной строки
Работа 4. Командные файлы и программирование (часть 1)
Цель работы: научиться использовать программные элементы языка командных файлов
Командный файл как программа
Командный файл может выступать как обычный сценарий, представляющий набор последовательно выполняющихся программ. Но он, также, может содержать программные конструкции в виде условий, циклов, переходов по меткам по аналогии с программами.
В отличие от программы на языке программирования высокого уровня (С++, Basic, Pascal), командный файл устроен проще и может содержать ограниченное количество программных конструкций. От версии к версии операционной системы Windows язык командных файлов становится богаче.
В данной работе мы рассмотрим простейшие, базовые конструкции.
Простейшие сценарии с диалогами
Основные команды, часто применяемые в командных файлах для создания и манипулирования переменными:
echo | вывод строки на экран |
echo on | включение режима "эхо" |
echo off | выключение режима "эхо" |
rem | строка комментария в командном файле |
set | присвоить значение переменной |
set /p | ввести данные |
Примеры:
файл primer1.bat
@echo off
rem Приветствие
echo Privet!
Результатом работы этого файла будет вывод на экран слова Privet!. Если убрать из файла конструкцию @echo off, каждая срока файла будет выводится вместе с результатом выполнения команд.
файл primer2.bat
@echo off
rem Создание и использование переменных
set name=Vasya
echo %name%
В этом примере демонстрируется возможность создания переменной с именем name и присвоения ей значения Vasya. Если нужно вывести значение переменной на экран, то ее имя должно заключаться между символами %.
Для ввода данных используется конструкция set /p
файл primer3.bat
@echo off
rem Диалог с пользователем
set /p name="Enter your name - "
echo Your name is - %name%
В этом диалоге сначала запрашивается имя пользователя, а затем оно выводится на экран.
Задание 1.
1.1. Взять текст примеров, создать три командных файла primer1.bat, primer2.bat и primer3.bat и запустить их на выполнение. Проанализировать результат. Заменить первые строки файлов на @echo on и сравнить результаты выполнения с предыдущими.
1.2. Разработать командный файл, который запрашивает у пользователя по очереди имя и возраст, а затем выводит их вместе.
Специальные переменные
Существуют специальные переменные, значения которых формируются операционной системой. Укажем некоторые из них:
%CD% - Принимает значение строки текущей директории.
%DATE% - Принимает значение текущей даты.
%TIME% - Принимает значение текущего времени.
%RANDOM% - Принимает значение случайного десятичного числа в диапазоне 1 -32767.
%ERRORLEVEL% - Принимает текущее значение кода завершения задачи ERRORLEVEL
%CMDEXTVERSION% - Принимает значение версии командного процессора CMD.EXE для расширенной обработки команд.
%CMDCMDLINE% - Принимает значение строки, которая вызвала командный процессор.
%PATH% - список директорий для запуска программ.
%OS% - содержит название операционной системы.
В любой момент пользовательский сценарий может обратиться к значению этих переменных.
файл primer4.bat
@echo off
rem Использование специальных переменных
set date=%DATE%
set time=%TIME%
echo You are working on - %OS%
echo Date and time - %date%, %time%
Задание 2.
2.1. Написать командный файл, который выводит на экран значения системных переменных.
2.2. Написать командный файл, который выводит на экран три случайных числа.
Использование параметров командной строки
При запуске пакетных файлов в командной строке можно указывать произвольное число параметров, значения которых можно использовать внутри файла. Это позволяет, например, применять один и тот же командный файл для выполнения команд с различными параметрами.
Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %*. При этом вместо подставляется имя выполняемого пакетного файла, вместо %0%1, %2, …, %9 — значения первых девяти параметров командной строки соответственно, а вместо %* — все аргументы. Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" переменные из %1 – %9 замещаются пустыми строками. Рассмотрим следующий пример. Пусть имеется командный файл copier.bat следующего содержания:
@ECHO OFF CLS ECHO File %0 copying directory %1 in %2 XCOPY %1 %2 /S
Если запустить его из командной строки с двумя параметрами, например
copier.bat C:\Programs D:\Backup
то на экран выведется сообщение
File copier.bat copying directory C:\Programs in D:\Backup
и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.
При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новое значение %9 — пустая строка.
Рассмотрим пример. Пусть командный файл my.bat вызван из командной строки следующим образом:
my.bat p1 p2 p3
Тогда %0=my.bat, %1=p1, %2=p2, %3=p3, параметры %4 – %9 являются пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3, параметры %3 – %9 – пустые строки.
При включении расширенной обработки команд SHIFT поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть числом от 0 до 9.
Например, в следующей команде:
SHIFT /2
параметр %2 заменяется на %3, %3 на %4 и т.д., а параметры %0 и %1 остаются без изменений.
Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT уже нельзя восстановить параметр (%0), который был первым перед сдвигом. Если в командной строке задано больше десяти параметров, то команду SHIFT можно использовать несколько раз.
В командных файлах имеются некоторые возможности синтаксического анализа заменяемых параметров. Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в табл. 3.1.
Таблица 3.1. Операторы для заменяемых параметров | |
Операторы | Описание |
%~Fn | Переменная %n расширяется до полного имени файла |
%~Dn | Из переменной %n выделяется только имя диска |
%~Pn | Из переменной %n выделяется только путь к файлу |
%~Nn | Из переменной %n выделяется только имя файла |
%~Xn | Из переменной %n выделяется расширение имени файла |
%~Sn | Значение операторов N и X для переменной %n изменяется так, что они работают с кратким именем файла |
%~$PATH:n | Проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %n заменяется на полное имя первого найденного файла. Если переменная PATH не определена или в результате поиска не найден ни один файл, эта конструкция заменяется на пустую строку. Естественно, здесь переменную PATH можно заменить на любое другое допустимое значение |
Данные синтаксические конструкции можно объединять друг с другом, например:
%~DPn — из переменной %n выделяется имя диска и путь,
%~NXn — из переменной %n выделяется имя файла и расширение.
Рассмотрим следующий пример. Пусть мы находимся в каталоге C:\TEXT и запускаем пакетный файл с параметром Рассказ.doc (%1=Рассказ.doc). Тогда применение операторов, описанных в табл. 3.1, к параметру %1 даст следующие результаты:
%~F1=C:\TEXT\Рассказ.doc %~D1=C: %~P1=\TEXT\ %~N1=Рассказ %~X1=.doc %~DP1=C:\TEXT\ %~NX1=Рассказ.doc
Задание 3.
3.1 Создать в C:\Temp пакетный файл spr.bat, который при запуске его с параметром (параметр – имя соответствующей команды) создает текстовый файл, который должен содержать справку по данной команде команде (например, при запуске spr if – в C:\Temp должен быть создан файл if.txt, содержащий описание этой команды). Создать с помощью пакетного файла spr.bat текстовые файлы if.txt, goto.txt, for.txt, rem.txt, echo.txt.
3.2 Создать командный файл find.bat, который ищет в системных каталогах и выводит на экран полное путевое имя программ notepad.exe и calc.exe
3.3. Написать командный файл, который принимает три имени файла в качестве параметров и трижды сдвигает эти параметры, а затем выводит на экран содержимое первого параметра.