Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Echo Ошибка выполнения стороннего скрипта exit /b 1)Содержание книги Поиск на нашем сайте
…
Отметим также, что сравнение проводится по общему типу данных, так что если обе сравниваемые строки содержат только цифры, то обе строки пре-образуются в числа, после чего выполняется сравнение этих чисел.
if %FileSize% LEQ 1000000 (…) else (…)
Если в команде if используется конструкция else, то она обязательно должна располагаться в той же строке, что и if.
Поставить выполнение или невыполнение некоторого фрагмента кода в за-висимость от существования некоторой переменной может команда:
if defined переменная команда [else команда ]
Здесь условие defined принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена:
@ECHO OFF
IF not defined FolderName set FolderName=d:\tmp xcopy /y /c *.log %FolderName%
Аналогично для проверки существования файла на диске используется ко-
манда
if [not] exist имя_файла команда [else команда ]
Пример использования команды:
if not exist %1 goto NoSuchFile
rem Вывод содержимого файла на экран echo Содержимое файла '%1'
type %1 goto:EOF
:NoSuchFile
rem Файл не найден. Выводим сообщение и создаем пустой файл echo Файл '%1' не найден.
copy nul %1
Наконец, последний вариант условной команды:
if cmdextversion число команда [else команда ]
ставит выполнение команды в зависимость от внутреннего номера версии теку-щей реализации расширенной обработки команд Номер версии будет увеличи-ваться на единицу при каждом добавлении существенных возможностей расши-ренной обработки команд. Таким образом можно адаптировать работу командно-го файла к возможностям установленной на компьютере командной оболочки. Если расширенная обработка команд отключена, условие cmdextversion не будет истинно.
Организация циклов в командных файлах
Циклическое повторение некоторого фрагмента командного файла можно организовать с использованием пары команд if и goto. Но гораздо эффективнее использовать для этих целей команду for. Команда for обеспечивает выполнение заданной команды (группы команд) для всех элементов некоторого множества (например, для всех файлов в папке). Обобщенный синтаксис команды for:
for {% переменная |%% переменная } in (множество) do команда [ Параметры ]
Чтобы скопировать содержимое всех файлов, имеющих разрешение.log или
.txt в текущем каталоге в один файл all.txt с помощью заменяемой переменной %%F,можно использовать следующую команду:
for %%f in (*.log *.txt) do type %%f >>all.txt
В приведенном примере каждый файл с расширением.log или.txt в теку-щем каталоге будет подставляться вместо переменной %%F, пока не будут обра-ботаны все файлы с таким расширением. Чтобы использовать данную команду непосредственно в командной строке, а не в командном файле, следует заменить все вхождения %%F на %F. В противном случае переменная игнорируется, и ото-бражается сообщение об ошибке.
В качестве элементов множества перебираемых элементов могут быть представлены любые строки, в этом случае переменная цикла по очереди примет значение каждой из этих строк. Например, так мы можем создать 5 папок с пре-допределенными названиями в текущей папке:
for %%f in (help work out bin “my files”) do md %%f
Существуют дополнительные синтаксические конструкции использования команды for. Одна из них реализуется, если указать в команде for ключ /D:
for /D %переменная in (набор) do команда [параметры]
Если параметр множество содержит подстановочные знаки (* и?), коман-да, указанная в параметре команда, выполняется для каждого каталога, совпа-дающего с параметром множество. Скажем, выполнив следующий командный файл:
for /D %%f in (d:\work\h*.*) do attrib +h %%f.
мы установим атрибут «Скрытый» для всех папок, начинающихся с символа h, в
папке d:\work. С помощью ключа /R можно задать рекурсию в команде for:
for /R [[диск:] путь] %переменная in (набор) do
команда[параметры]
Команда с ключом /R проходит по дереву каталогов с корнем в [ диск: ] путь, выполняя инструкцию for для каждого каталога в дереве. Если после ключа /R не задан каталог, предполагается текущий каталог. Если параметр множество зада-но одной точкой (.), то команда просто перечислит каталоги в дереве.
for /R d:\ %%f in (.) do echo %%f
Для формирования списка всех файлов с расширением doc в заданном ката-логе и всех его подкаталогах можно использовать следующую команду в пакет-ном файле:
for /R d:\docs %%f in (*.doc) do echo %%f >> docfiles.lst
Ключ /L позволяет реализовать с помощью команды for арифметический цикл, когда переменная цикла получает ряд целочисленных значений:
for /L {%% | %} переменная in (НачальноеЗначение#, шаг#, КонечноеЗначение#) do команда [ Параметры ]
Цикл выполняет команду для каждого значения переменной цикла. Пере-менная цикла первоначально принимает значение НачальноеЗначение# и далее на каждом шаге изменяется на величину шаг#. Когда переменная итерации превысит параметр КонечноеЗначение#, командная оболочка покидает цикл. Также можно использовать отрицательный параметр для перемещения в диапазоне убывающих значений. Например, (1,1,4) создает последовательность «1 2 3 4», а (5,-2,1) созда-ет последовательность «5 3 1».
Например, в результате выполнения следующего фрагмента командного файла в файл testconnect.log будет помещен результат проверки доступности ком-пьютеров с адресами в диапазоне 192.168.0.(1-254). Цикл обеспечивает перебор последней цифры адреса.
echo %date% %time%>>testconnect.log FOR /L %%f IN (1,1,254) DO (ping -n 3 192.168.0.%%f
if errorlevel 1 echo Компьютер 192.168.0.%%f не отвечает >>
Testconnect.log)
Числа, помещаемые в переменную цикла for /L, можно использовать в арифметических вычислениях. Рассмотрим командный файл my.bat следующего содержания:
@echo off
В результате выполнения этого командного файла будет вычислена сумма чисел от 1 до 5 и на экране будет выведен результат в виде:
Sum=15
Использование команды for с ключом /f предоставляет возможности раз-бора содержимого текстовых файлов. Обобщенный синтаксис команды в этом случае: for /F ["ключи"] %переменная in (набор) do команда [параметры]
Разбор файлов состоит в чтении вывода, строки или содержимого файла, разбиении его на отдельные строки текста, разбиении каждой строки на состав-ляющие слова по определенным маркерам и выполнении команд(ы) для каждого выделенного слова. По умолчанию /F передает первый отделенный пробелом элемент из каждой строки файлов заданного набора.
Разбор файлов следует использовать для обработки вывода команд, строк и содержимого файла. Переменные итерации позволяют перебирать строки, кото-рые требуется проверить. Параметр ключи используется для изменения порядка разбора.
По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов, причем пустые строки в файле пропус-каются. Ключи задаются в виде заключенной в кавычки строки, их перечень и описание приведены в таблице 9.
Ключ EOL позволяет определить символ, наличие которого в начале строки идентифицирует строку как комментарий, исключая ее из разбора.
Ключ SKIP позволяет исключить из разбора несколько начальных строк файла, если по формату они содержат заголовок данных, описательную информа-цию и др., т.е. информацию, не предназначенную для обработки.
Ключ DELIMS позволяет определить, какие символы будут воспринимать-ся командой for в качестве разделителей логических подстрок-элементов разбора.
Ключ TOKENS задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. Для каждого элемента создаются дополнитель-
ные имена переменных. Форма M-N задает диапазон, указывающий элементы с M -го по N -ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.
Разберем использование этой команды на примере пакетного файла par-ser.bat, который производит разбор файла со списком запущенных процессов, по-лученных командой tasklist:
@ECHO OFF tasklist>list.txt
FOR /F "TOKENS=1,3,4-6 SKIP=3" %%i IN (list.txt) DO echo %%i %%l
При выводе информации о запущенных процессах учитываем, что команда tasklist без параметров выводит информацию в виде:
Заносим этот список в файл list.txt, а затем обрабатываем его построчно. Для каждой строки, кроме первых 3 (skip= 3), выделяем 5 строк. В %%i заносятся имена процессов, %%j – имя сессии, %%k, %%l, %%m – данные из 3 осталь-ных столбцов (сразу отмечаем, что допускается всего 26 переменных для разбора по числу символов в латинском алфавите). В рассмотренном примере просто вы-водим на экран имена процессов и объем используемой ими памяти.
Результат вывода команды tasklist необязательно предварительно заносить в файл. В скобках, задающих обрабатываемый набор строк, можно в апострофах непосредственно указать команду, вывод которой будет разбирать команда for. Еще один пример:
@ECHO OFF
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-16; просмотров: 361; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.217.86 (0.011 с.) |