Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Внимание. Перед названием переменной должны стоять именно два знака процента (%%), а не один, как это было при использовании команды FOR непосредственно из командной ⇐ ПредыдущаяСтр 2 из 2
Перед названием переменной должны стоять именно два знака процента (%%), а не один, как это было при использовании команды FOR непосредственно из командной строки. Сразу приведем пример. Если в командном файле заданы строки @ECHO OFF FOR %%i IN (Раз, Два, Три) DO ECHO %%i то в результате его выполнения на экране будет напечатано следующее: Раз Два Три Параметр множество в команде FOR задает одну или более текстовых строк, разделенных запятыми, которые вы хотите обработать с помощью заданной команды. Скобки здесь обязательны. Параметр команда [параметры] задает команду, выполняемую для каждого элемента множества, при этом вложенность команд FOR на одной строке не допускается. Если в строке, входящей во множество, используется запятая, то значение этой строки нужно заключить в кавычки. Например, в результате выполнения файла с командами @ECHO OFF FOR %%i IN (" Раз, Два", Три) DO ECHO %%i на экран будет выведено Раз, Два Три Параметр %%переменная представляет подставляемую переменную (счетчик цикла), причем здесь могут использоваться только имена переменных, состоящие из одной буквы. При выполнении команда FOR заменяет подставляемую переменную текстом каждой строки в заданном множестве, пока команда, стоящая после ключевого слова DO, не обработает все такие строки. Замечание. Чтобы избежать путаницы с параметрами командного файла %0 — %9, для переменных следует использовать любые символы кроме 0 – 9. Параметр множество в команде FOR может также представлять одну или несколько групп файлов. Например, чтобы вывести в файл список всех файлов с расширениями txt и prn, находящихся в каталоге C: \TEXT, без использования команды DIR, можно использовать командный файл следующего содержания: @ECHO OFF FOR %%f IN (C: \TEXT\*.txt C: \TEXT\*.prn) DO ECHO %%f > > list.txt При таком использовании команды FOR процесс обработки продолжается, пока не обработаются все файлы (или группы файлов), указанные во множестве. Цикл FOR /D … IN … DO … Следующий вариант команды FOR реализуется с помощью ключа /D: FOR /D %переменная IN (набор) DO команда [параметры] В случае, если набор содержит подстановочные знаки, то команда выполняется для всех подходящих имен каталогов, а не имен файлов. Скажем, выполнив следующий командный файл: @ECHO OFF CLS FOR /D %%f IN (C: \*.*) DO ECHO %%f мы получим список всех каталогов на диске C:, например: C: \Arc C: \CYR C: \MSCAN C: \NC C: \Program Files C: \TEMP C: \TeX C: \WINNT
Цикл FOR /R … IN … DO … С помощью ключа /R можно задать рекурсию в команде: FOR: FOR /R [[диск: ]путь] %переменная IN (набор) DO команда [параметры] В этом случае заданная команда выполняется для каталога [диск: ]путь, а также для всех подкаталогов этого пути. Если после ключа R не указано имя каталога, то выполнение команды начинается с текущего каталога. Например, для распечатки всех файлов с расширением txt в текущем каталоге и всех его подкаталогах можно использовать следующий пакетный файл: @ECHO OFF CLS FOR /R %%f IN (*.txt) DO PRINT %%f Если вместо набора указана только точка (.), то команда проверяет все подкаталоги текущего каталога. Например, если мы находимся в каталоге C: \TEXT с двумя подкаталогами BOOKS и ARTICLES, то в результате выполнения файла: @ECHO OFF CLS FOR /R %%f IN (.) DO ECHO %%f на экран выведутся три строки: C: \TEXT\. C: \TEXT\BOOKS\. C: \TEXT\ARTICLES\. Цикл FOR /L … IN … DO … Ключ /L позволяет реализовать с помощью команды FOR арифметический цикл, в этом случае синтаксис имеет следующий: вид: FOR /L %переменная IN (начало, шаг, конец) DO команда [параметры] Здесь заданная после ключевого слова IN тройка (начало, шаг, конец) раскрывается в последовательность чисел с заданными началом, концом и шагом приращения. Так, набор (1, 1, 5) раскрывается в (1 2 3 4 5), а набор (5, -1, 1) заменяется на (5 4 3 2 1). Например, в результате выполнения следующего командного файла: @ECHO OFF CLS FOR /L %%f IN (1, 1, 5) DO ECHO %%f переменная цикла %%f пробежит значения от 1 до 5, и на экране напечатаются пять чисел: Числа, получаемые в результате выполнения цикла FOR /L, можно использовать в арифметических вычислениях. Рассмотрим командный файл my.bat следующего содержания: @ECHO OFF CLS FOR /L %%f IN (1, 1, 5) DO CALL: 2 %%f GOTO: EOF : 2 SET /A M=10*%1 ECHO 10*%1=%M% В третьей строке в цикле происходит вызов нового контекста файла my.bat с текущим значением переменной цикла %%f в качестве параметра командной строки, причем управление передается на метку: 2 (см. описание CALL в разделе " Изменения в командах перехода"). В шестой строке переменная цикла умножается на десять, и результат записывается в переменную M. Таким образом, в результате выполнения этого файла выведется следующая информация: 10*1=10 10*2=20 10*3=30 10*4=40 10*5=50 Цикл FOR /F … IN … DO … Самые мощные возможности (и одновременно самый запутанный синтаксис) имеет команда: FOR с ключом /F: FOR /F [" ключи" ] %переменная IN (набор) DO команда [параметры] Здесь параметр набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбиении его на отдельные строки текста и выделении из каждой строки заданного числа подстрок. Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла (заданной команды). По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр " ключи" служит для переопределения заданных по умолчанию правил обработки строк. Ключи представляют собой заключенную в кавычки строку, содержащую приведенные в табл. 3.3 ключевые слова:
При использовании ключа TOKENS=X, Y, M-N создаются дополнительные переменные. Формат M-N представляет собой диапазон подстрок с номерами от M до N. Если последний символ в строке TOKENS= является звездочкой, то создается дополнительная переменная, значением которой будет весь текст, оставшийся в строке после обработки последней подстроки. Разберем применение этой команды на примере пакетного файла parser.bat, который производит разбор файла myfile.txt: @ECHO OFF IF NOT EXIST myfile.txt GOTO: NoFile FOR /F " EOL=; TOKENS=2, 3* DELIMS=, " %%i IN (myfile.txt) DO @ECHO %%i %%j %%k GOTO: EOF : NoFile ECHO Не найден файл myfile.txt! Здесь во второй строке производится проверка наличия файла myfile.txt; в случае отсутствия этого файла выводится предупреждающее сообщение. Команда FOR в третьей строке обрабатывает файл myfile.txt следующим образом: Пропускаются все строки, которые начинаются с символа точки с запятой (EOL=;). Вторая и третья подстроки из каждой строки передаются в тело цикла, причем подстроки разделяются пробелами (по умолчанию) и/или запятыми (DELIMS=,). В теле цикла переменная %%i используется для второй подстроки, %%j — для третьей, а %%k получает все оставшиеся подстроки после третьей. В нашем примере переменная %%i явно описана в инструкции FOR, а переменные %%j и %%k описываются неявно с помощью ключа TOKENS=. Например, если в файле myfile.txt были записаны следующие три строки: ААА ББББ ВВВВ, ГГГГГ ДДДД ЕЕЕЕЕ, ЖЖЖЖ ЗЗЗЗ ; КККК ЛЛЛЛЛ МММММ то в результате выполнения пакетного файла parser.bat на экран выведется следующее: ББББ ВВВВ ГГГГГ ДДДД ЖЖЖЖ ЗЗЗЗ Замечание Ключ TOKENS= позволяет извлечь из одной строки файла до 26 подстрок, поэтому запрещено использовать имена переменных, начинающиеся не с букв английского алфавита (a–z). Следует помнить, что имена переменных FOR являются глобальными, поэтому одновременно не может быть активно более 26 переменных. Команда FOR /F также позволяет обработать отдельную строку. Для этого следует ввести нужную строку в кавычках вместо набора имен файлов в скобках. Строка будет обработана так, как будто она взята из файла. Например, файл следующего содержания: @ECHO OFF FOR /F " EOL=; TOKENS=2, 3* DELIMS=, " %%i IN (" ААА ББББ ВВВВ, ГГГГГ ДДДД") DO @ECHO %%i %%j %%k при своем выполнении напечатает ББББ ВВВВ ГГГГГ ДДДД Вместо явного задания строки для разбора можно пользоваться переменными среды, например: @ECHO OFF SET M=ААА ББББ ВВВВ, ГГГГГ ДДДД FOR /F " EOL=; TOKENS=2, 3* DELIMS=, " %%i IN (" %M%") DO @ECHO %%i %%j %%k Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует вместо набора имен файлов в скобках ввести строку вызова команды в апострофах (не в кавычках!). Строка передается для выполнения интерпретатору команд cmd.exe, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующий командный файл: @ECHO OFF CLS ECHO Имена переменных среды: ECHO. FOR /F " DELIMS==" %%i IN ('SET') DO ECHO %%i выведет перечень имен всех переменных среды, определенных в настоящее время в системе. В цикле FOR допускается применение тех же синтаксических конструкций (операторов), что и для заменяемых параметров (табл. 3.4).
Замечание Если планируется использовать расширения подстановки значений в команде FOR, то следует внимательно подбирать имена переменных, чтобы они не пересекались с обозначениями формата. Например, если мы находимся в каталоге C: \Program Files\Far и запустим командный файл следующего содержания: @ECHO OFF CLS FOR %%i IN (*.txt) DO ECHO %%~Fi то на экран выведутся полные имена всех файлов с расширением txt: C: \Program Files\Far\Contacts.txt C: \Program Files\Far\FarFAQ.txt C: \Program Files\Far\Far_Site.txt C: \Program Files\Far\License.txt C: \Program Files\Far\License.xUSSR.txt C: \Program Files\Far\ReadMe.txt C: \Program Files\Far\register.txt C: \Program Files\Far\WhatsNew.txt
|