Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 2159; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.01 с.) |