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