Использование параметров командной строки и переменных среды
При запуске пакетных файлов в командной строке можно указывать произвольное число параметров, значения которых допускается использовать внутри файла Это позволяет, например, применять один и тот же командный файл для выполнения команд с различными параметрами Для доступа к параметрам командной строки применяются символы %0, %1,…,%9. Вместо %0 подставляется имя выполняемого пакетного файла, а вместо %1, %2,…, %9 — значения первых девяти параметров командной строки соответственно Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" переменные из %1 - %9 являются пустыми строками. Рассмотрим следующий пример. Пусть имеется командный файл copier.bat такого содержания
@ECHO OFF CLS ECHO Файл %0 копирует каталог %1 в %2 XCOPY %1 %2 /S Если запустить его из командной строки с двумя параметрами, например copier.bat C:\Programs D:\Backup то на экран выведется сообщение
Файл copier.bat копирует каталог C:\Programs в D:\Backup и произойдет копирование каталога c:\Programs со всеми его подкат алогами в D.\Backup. При необходимости можно использовать более девяти параметров командной строки Это достигается с помощью команды shift, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, т е значение %1 копируется в %0, значение %2 — в %1 и т д Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9 Если же такой параметр не задан, то новое значение %9 — пустая строка. Например, пусть командный файл my.bat вызван из командной строки следующим образом my.bat p1 р2 р3 Тогда %0=my bat, %1=p1, °%2=р2, %3=р3, параметры %4 — %9 являются пустыми строками После выполнения команды shift значения замещаемых параметров изменятся следующим образом %0=p1, %1=р2, %2=р3, параметры %3 — %9 — пустые строки.
Обратный shift (обратный сдвиг) отсутствует, т.е. после выполнения shift уже нельзя восстановить параметр (%0), который был первым перед сдвигом Если в командной строке задано больше десяти параметров, то команду shift можно использовать несколько раз. С помощью команды set внутри командных файлов можно работать с переменными среды, в том числе объявлять собственные переменные. В Windows 9х все переменные среды рассматриваются как строки и для получения их значений нужно имя соответствующей переменной заключить в символы %. Например, @ECHO OFF CLS REM Создание переменной MyVar SET MyVar=Привет REM Изменение переменной SET MyVar=%MyVar% ECHO Значение переменной MyVar: %MyVar% REM Удаление переменной MyVar SET MyVar=
При запуске такого командного файла на экран выведется строка Значение переменной MyVar: Привет!
Внутри командного файла можно использовать и переменные, которые система устанавливает автоматически. Например
@ECHO OFF CLS ECHO Каталог Windows: %WinDir% ECHO Каталог для временных файлов: %TEMP%
При включенной расширенной обработке команд имеется возможность рассматривать переменные среды как числа и производить с ними арифметические вычисления. Для этого используется команда set с ключом /а. Приведем пример пакетного файла add.bat, складывающего два числа, заданных в качестве параметров командной строки, и выводящего полученную сумму на экран: @ЕСНО OFF REM В переменной М будет храниться сумма SET /А М=%1+%2 ECHO Сумма %1 и %2 равна %М% REM Удалим переменную М SET M= Напомним, что все изменения, производимые с помощью команды set над переменными среды в командном файле, сохраняются и после завершения работы этого файла, но действуют только внутри текущего командного окна. В Windows имеется возможность локализовать изменения переменных среды внутри пакетного файла, т. е. автоматически восстанавливать значения всех переменных в том виде, в каком они были до начала запуска данного файла. Для этого используются две команды: setlocal и endlocal. Команда setlocal определяет начало области локальных установок переменных среды. Другими словами, изменения среды, внесенные после выполнения setlocal, будут являться локальными относительно текущего пакетного файла. Каждая команда setlocal должна иметь соответствующую команду endlocal для восстановления прежних значений переменных среды. Изменения среды, внесенные после выполнения команды endlocal, уже не являются локальными относительно текущего пакетного файла; их прежние значения не будут восстановлены по завершении выполнения этого файла.
Рассмотрим пример командного файла super.bat, который запускает приложение superApp, записывает вывод в файл c:\superapp.out и загружает этот файл в программу Notepad:
@ЕСНО OFF REM Запоминаем значения переменных среды SETLOCAL REM Добавляем к переменной PATH путь REM к каталогу G:\programs\superapp PATH=G:\programs\superapp,%РАТН% RЕМ Запускаем приложение CALL superapp>c:\superapp.out REM Восстанавливаем значения переменных среды ENDLOCAL REM Загружаем полученный файл в Блокнот START notepad C:\superapp.out
При включении расширенной обработки команд у SETLOCAL можно указывать необязательный аргумент, который может иметь значения ENABLEEXTENSIONS или DISABLEEXTENSIONS. Это позволяет временно включить или отключить расширенную обработку команд до выполнения команды ENDLOCAL, независимо от исходного состояния режима обработки команд до вызова команды. SETLOCAL Если команда setlocal вызывается с аргументом, то она устанавливает код ошибки ERRORLEVEL. Если указан один из двух допустимых аргументов, то код ошибки будет равен нулю, иначе возвращается значение 1. Это свойство можно использовать в пакетных файлах, чтобы определить доступность расширенной обработки команд, например XCOPY Б: > NUL SETLOCAL ENABLEEXTENSIONS IF ERRORLEVEL 1 ECHO He удается включить расширенную обработку
В данном примере команда XCOPY с недопустимым аргументом Б: необходима для установки ненулевого значения errorlevel, т к в прежних версиях интерпретатора cmd.exe команда setlocal не устанавливает код ошибки. Перейдем теперь к рассмотрению заменяемых параметров командной строки (%0, %1 и т.д.) В пакетных файлах Windows работа с этими параметрами становится более удобной.
Во-первых, с помощью символов %* в пакетном файле можно обозначить все аргументы (%1 %2 %3 %4 %5) Таким образом, запустив следующий пакетный файл @ЕСНО OFF ECHO Файл запущен с параметрами: % *
с параметрами а в с, мы на экране получим следующее сообщение-файл запущен с параметрами: ABC Вo-вторых, появляются некоторые возможности синтаксического анализа заменяемых параметров Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в таблице 2.1 Таблица 2.1 - Операторы для заменяемых параметров Операторы Описание %~Fn Переменная %n расширяется до полного имени файла %~Dn Из переменной %n выделяется только имя диска %~Рn Из переменной %n выделяется только путь к файлу %~NnИз переменной %n выделяется только имя файла %~Хп Из переменной %п выделяется расширение имени файла %~Sn Значение операторов N и х для переменной °п изменяется так, что они работают с кратким именем файла
%~$РАТН:n Проводится поиск по каталогам, заданным в переменной среды PATH, и переменная %n заменяется на полное имя первого найденного файла Если переменная path не определена или в результате поиска не найден ни один файл, эта конструкция заменяется на пустую строку Естественно, здесь переменную PATH можно заменить на любое другое допустимое значение
Данные синтаксические конструкции можно объединять друг с другом, например %~DPn — из переменной %n выделяется имя диска и путь, %~NXn — из переменной %n выделяется имя файла и расширение
Рассмотрим следующий пример. Пусть мы находимся в каталоге с:\техт и запускаем пакетный файл с параметром Рассказ.doc (0%1=Рассказ.dос). Тогда применение операторов, описанных в табл 4 1, к параметру %1 даст следующие результаты %~Fl=C:\TEXT\Paccказ.doc %~D1=C: %~Р1=\ТЕХТ\ %~Xl=.doc %DPl=C.\TEXT\ %NХ1=Рассказ.doc
Небольшое изменение произошло также в команде shift, которая производит сдвиг параметров. При включении расширенной обработки команд shift поддерживает ключ /п, задающий начало сдвига параметров с номера n, где n может быть числом от 0 до 9. Например, в следующей команде: SHIFT /2 параметр %2 заменяется на %3, %3 на %4 и т. д., а параметры %0 и %1 остаются без изменений.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|