Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование параметров командной строкиСодержание книги Поиск на нашем сайте
Вызов командных файлов можно параметризовать. Под этим подразумева-ется вызов командного файла с передачей ему от одного до нескольких парамет-ров. В таком случае скрипт, помещенный в командный файл, может обрабатывать различную информацию при разных параметрах вызова, делая его гибче и адап-тированнее нуждам оператора. Например, командный файл архивирования фай-лов в некоторой папке может получать имя обрабатываемой папки из параметров вызова и тогда его можно применять к различным папкам, а не к одной, имя кото-рой жестко прописано в коде командного скрипта.
Для доступа к параметрам командной строки в командном файле приме-няются символы %0, %1,…,%9. При этом вместо %0 всегда подставляется имя выполняемого пакетного файла, а вместо %1, %2,…, %9 — значения первых де-вяти параметров командной строки соответственно Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" перемен-ные из %1 - %9 являются пустыми строками. Модифицируем ранее рассмотрен-ный пример архивирования и удаления файлов arc.bat.
rem Вызов arc.bat имя_папки маска_файлов имя_архива @echo off
d:\winrar\rar a %1\%3 %1\%2 del %1\%2
Теперь этот командный файл необходимо вызывать с тремя параметрами: в первом передается полный путь к папке с файлами, второй параметр определяет маску файлов, подлежащих архивации и удалению, а третий параметр задает имя архива, в который будут помещены заархивированные файлы. Обратиться к командному файлу можно так:
arc.bat d:\tmp *.txt arc.rar
А для другой папки, возможно, потребуется архивация файлов с расшире-нием log и вызов командного файла примет вид:
arc.bat d:\work\logs *.log log.rar
Если в командный файл передается более 9 параметров, на помощь прихо-дит команда shift, которая сдвигает значения параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 —в %1 и т.д.Замещаемому параметру %9 присваивается десятое значениепараметра вызова. Если же такой параметр не задан, то переменная %9 получит в
качестве значения пустую строку. Необходимо помнить, что не существует ко-манды, обратной shift. Таким образом, не удастся восстановить параметр (%0) после выполнения команды shift.
Команда shift поддерживает ключ /n, который указывает команде начинать сдвиг с N -го аргумента, где N — число от нуля до восьми. Например:
Shift /3
сдвинет %4 на %3, % 5 на %4 и т. д. %0, %1 и %2 останутся неизменными. Если в командной строке задано больше десяти параметров, то команду
shift можно использовать несколько раз.
Для практических случаев использования командных файлов нередки слу-чаи, когда в качестве параметров им передаются имена файлов и папок. В этом случае в командном файле может встать проблема выделения из этого имени со-ставляющих частей – названия диска, пути, непосредственно имени или расшире-ния файла. Для автоматического выделения подобных объектов можно использо-вать операторы, перечисленные в таблице 7.
Например, всегда можно узнать, с какого диска был запущен командный
файл:
echo %~D0
Комбинируя операторы из таблицы 7, можно получать составные конст-рукции:
%~DPn — из переменной %n выделяется имя диска и путь, %~NXn — из переменной %n выделяется имя файла и расширение Команда
ren %1 %~N1_old%~X1
переименует файл, имя которого передается в качестве параметра, дописав к име- ни файла _old: file.dat переименуется в file_old.dat.
Взаимодействие пользователя с командных файлов
Для взаимодействия пользователя с командным файлом предусмотрен го-раздо меньший выбор средств по сравнению с традиционными алгоритмически-ми языками.
Для того чтобы вручную прервать выполнение запущенного командно-го файла, необходимо нажать клавиши <Ctrl>+<C> или <Ctrl>+<Break>. Если надо лишь приостановить работу командного файла до момента нажатия клавиши на клавиатуре, можно воспользоваться командой pause. Хорошим стилем счита-ется выдача предупреждения пользователя о потенциально опасных для данных командах и приостановкой выполнения. Тогда у пользователя будет возможность продолжить выполнения командного скрипта при нажатии клавиши или его за-
вершения по <Ctrl>+<C> / <Ctrl>+<Break>:
ECHO Сейчас будут удалены все файлы в d:\work ECHO Для отмены нажмите Ctrl-C
PAUSE DEL d:\work\*.*
Для того, чтобы пользователь мог задать значение переменной с клавиату-ры используется команда set с ключом /p:
SET /P имя переменной = текст
Пользователю будет выведен текст-приглашение и командный файл пе-рейдет в режим ожидания ввода с клавиатуры. Введенная строка заносится в пе-ременную среды.
set /p Folder=Введите имя папки
Еще одну интересную возможность – делать выбор одного из альтернатив-ных вариантов, предоставляет команда choice.
Команды передачи управления
Последовательное выполнение команд в командном файле можно прервать несколькими способами. Во-первых, можно использовать команду перехода Goto метка
Эта, табуированная в языках высокого уровня, команда в условиях слабо структурируемых командных файлов используется довольно часто. Метка, на ко-торую осуществляется переход по этой команде, оформляется следующим обра-зом: :метка
Очевидно, что безусловный переход должен быть обусловлен командой if, иначе не выполнятся команды, помещенные между командой перехода и меткой в случае перехода вперед или произойдет зацикливание при переходе назад. В ка-честве метки перехода можно указывать строку :eof, которая передает управление в конец текущего пакетного файла:
@ЕСНО OFF
REM Если файл был запущен без параметров, выходим из него, REM иначе печатаем первый параметр
IF -%1==- GOTO:EOF ECHO %1
Второй способ передачи управления, причем как внутри самого пакетного файла, так и при обращении к другим пакетным файлам – использование команды
call.
Для того, чтобы обратиться к внешнему командному файлу достаточно указать его и его параметры в команде call:
call файл пакетные_параметры
Пример:
Call test.bat par1 par2 par3
Данный вызов приведет к передаче управления командному файлу test.bat c тремя указанными параметрами. Альтернативой подобному запуску может стать использование имени стороннего командного файла в качестве имени команды:
Test.bat par1 par2 par3
Но при последнем вызове после окончания работы командного файла test.bat управление не будет возвращено в вызывавший командный файл, а, следо-вательно, не будут выполнены все следующие за командой вызова инструкции. Вызов же командой call позволяет по окончании работы вызванного командного файла вернуться в вызвавший и продолжить его выполнение.
В качестве адресата вызова команды call допустимо использовать метки внутри текущего командного файла:
CALL:метка аргументы
При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами и управление передается на инструкцию, распо-ложенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза завершить его работу, достигнув конца командного скрипта или вызвав команду exit /b (ключ /b позволяет завершить работу лишь командного файла, а не сеанса оболочки). При этом первый выход будет означать возврат управления на инструкцию, расположенную сразу после строки call, а второй выход заверша-ет выполнение пакетного файла. Такое поведение команды call позволяет оформ-лять фрагменты кода в виде подпрограмм:
Call:proc1 par1 par2 ...
:proc1 rem Здесь %0=:proc1 %1=par1 %2=par2 ... Exit /b
...
Команды перехода Организация ветвлений алгоритмов в зависимости от выполнения или не-
выполнения того или иного условия является одной из популярнейших структур-ных конструкций при написании программ на большинстве языков программиро-вания. Не стал исключением и язык командных файлов. Для организации перехо-да по условию здесь может быть использована команда if. Ниже представлены все возможные варианты вызова этой команды.
if [/i] [not] строка1 == строка2 команда [else команда ] if [not] errorlevel число команда [else команда ]
if [not] exist имя_файла команда [else команда ]
if [/i] строка1 оп_сравнения строка2 команда [else команда ] if cmdextversion число команда [else команда ]
if defined переменная команда [else команда ]
Первый вариант операции сравнения позволяет выполнить команду в зави-симости от совпадения или несовпадения двух строк (которые могут быть пред-ставлены и переменными). Например, так мы можем предотвратить запуск ко-мандного файла без параметров:
@echo off if -%1 == - goto:eof …
При сравнении с использованием переменных всегда необходимо учиты-вать возможный вариант отсутствия переменной с указанном имени в текущем контексте командного окна. Например, если командный файл запущен без пара-метров, то переменная %1 будет не определена, и на этапе выполнения безобид-ная на первый взгляд конструкция
if %1 == /h goto help
приведет к ошибке из-за отсутствия левого операнда в операторе сравнения. По-этому рекомендуется использовать в правой и левой части операции сравнения какой-нибудь дополнительный символ, например '-' (или заключать сравниваемые объекты в кавычки).
Второй вариант команды if опирается на результат выполнения предыду-щей команды. Здесь необходимо учесть, что в результате своего выполнения ко-манды Windows выставляют переменную окружения errorlevel в значение кода своего завершения. Общепринято, что код завершения 0 соответствует успешно-му завершению команды, а 1 и более – неудачному завершению (например, ниче-го не найдено командой find, команда ping не получила ответ на запрос, команда del не смогла удалить файл и т.п.)и анализ значения переменной дает возмож-ность выполнить различные действия, например, при успешном или неуспешном выполнении предшествующей команды:
ping www.volpi.ru >nul if %errorlevel% 1 (
echo %date% %time% Нет связи с сайтом www.volpi.ru>> report.txt ipconfig /all >>report.txt
)
Приведенный выше пример иллюстрирует возможность выполнения не-скольких команд в случае выполнения (или невыполнения) заданного условия. Для группировки команд используются круглые скобки.
Если алгоритм работы командного файла предусматривает переход в слу-
чае отношений «больше», «меньше», «больше или равно», «меньше или равно», то можно использовать другой синтаксический вариант команды if:
if [/i] строка1 оп_сравнения строка2 команда [else команда ]
Здесь для сравнения используются трехбуквенные операторы, названия и назначение которых приведены в таблице 8. Ключ /i позволяет игнорировать ре-гистр символов при сравнении.
call test.bat par1 par2 par3 if %errorlevel% GTR 1 (
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-16; просмотров: 2000; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.241.191 (0.007 с.) |