Главная Monday, September 25 2023  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
лента новостей сайта microsin.ru лента новостей
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:
Кто он-лайн
Сейчас на сайте:
Гостей - 1
Модуль рекламы
Поисковые системы

Применение команды for в bat-файлах (technet.microsoft) Версия для печати
Написал microsin   
24.01.2008
Команда FOR задает запуск некоторой команды для каждого файла из заданного множества. Информация для данной статьи взята с сайта Microsoft.

Работу команды for можно охарактеризовать так:
a) получение диапазона данных
b) присвоить переменной цикла for (например %%G) значение из диапазона данных
c) выполнить команду (иногда в команде участвует %%G, например, в качестве параметра)
d) выполнить шаги a), b), c), пока не будет достигнуто конечное значение из диапазона значений переменной цикла.
Очень хорошо команда for описана в справке w2k.

Синтаксис 

for {%переменная | %%переменная} in (множество) do команда [ПараметрыКоманднойСтроки]

<>Параметры
{%переменная | %%переменная}
Обязательный параметр. Замещаемый параметр. Используйте %переменная для выполнения команды for из командной строки. Используйте %%переменная для выполнения команды for в пакетном файле. В переменных учитывается регистр и они могут быть представлены буквами, например %A, %B или %C.
(множество)
Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или текстоваых строк, подлежащих обработке заданной командой. Скобки являются обязательными.
команда
Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога, диапазона значений или текстовой строки, включенной в указанный параметр (множество).
ПараметрыКоманднойСтроки
Задает параметры командной строки, которые используются с указанной командой.
/?
Отображение справки в командной строке.
 
Заметки

Использование команды for
Команда for может быть использована в пакетном файле или непосредственно из командной строки.

Использование параметров командной строки пакетного файла
Перечисленные ниже атрибуты применяются к команде for.

В команде for переменная %переменная (или %%переменная) будет заменяться текстовой строкой из заданного параметра множество, пока параметр команда не обработает все файлы этого множества.

Имена параметров переменная команды for учитывают регистр буквы, они являются глобальными и одновременно может быть активно не больше 52 переменных.

Для обозначения параметра переменная можно использовать любые знаки, кроме цифр 0–9, чтобы не было конфликта с параметрами пакетных файлов %0–%9. Для простых пакетных файлов вполне достаточно обозначений с одним знаком, например %%f.

В сложных пакетных файлах могут быть использованы и другие обозначения для параметра переменная.

 

Задание множества файлов
Параметр множество может представлять группу файлов или несколько групп файлов. Для задания групп файлов можно использовать подстановочные знаки (* и ?). Следующие множества файлов являются допустимыми:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)

Когда используется команда for, первое значение в параметре множество заменяет параметр %переменная (или %%переменная), а затем для обработки этого значения выполняется указанная команда. Это продолжается до тех пор, пока не будут обработаны все файлы (или группы файлов), которые соответствуют значению параметра множество.

Использование ключевых слов in и do
In и do не являются параметрами, но они требуются для работы команды for. Если какое-то из слов пропущено, на экран будет выведено сообщение об ошибке.

Использование дополнительных форм команды for
Если расширения командного процессора разрешены (по умолчанию), то поддерживаются следующие дополнительные формы команды for.

Только каталоги
Если параметр множество содержит подстановочные знаки (* и ?), команда, указанная в параметре команда, выполняется для каждого каталога (кроме множества файлов в указанном каталоге), совпадающего с параметром множество. Используется следующий синтаксис.
for /D {%% | %}переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Рекурсивная
Проходит по дереву каталогов с корнем в [диск:]путь, выполняя инструкцию for для каждого каталога в дереве. Если после ключа /R не задан каталог, предполагается текущий каталог. Если параметр множество задан одной точкой (.), то команда просто перечислит каталоги в дереве. Используется следующий синтаксис.
for /R [[диск:]путь] {%% | %}переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Итерация диапазона значений
Используйте переменную итерации для установки начального значения (НачальноеЗначение#), а затем перемещайтесь по диапазону значений, пока значение не превысит конечное значение множества (КонечноеЗначение#). /L выполнит итерацию, сравнив параметр НачальноеЗначение# с параметром КонечноеЗначение#. Если параметрНачальноеЗначение# меньше параметра КонечноеЗначение#, то выполняется команда. Когда переменная итерации превысит параметр КонечноеЗначение#, командная оболочка покидает цикл. Также можно использовать отрицательный параметр шаг# для перемещения в диапазоне убывающих значений. Например, (1,1,5) создает последовательность «1 2 3 4 5», а (5,-1,1) создает последовательность «5 4 3 2 1». Используется следующий синтаксис.
for /L {%% | %}переменная in (НачальноеЗначение#,шаг#,КонечноеЗначение#) do команда [ПараметрыКоманднойСтроки]

Итерация и разбор файлов
Разбор файлов следует использовать для обработки вывода команды, строк и содержимого файла. Используйте переменные итерации для определения содержимого или строк, которые требуется проверить. Параметр КлючевыеСловаРазбора используется для изменения разбора. Используйте параметр маркера КлючевыеСловаРазбора для указания маркеров, которые воспринимаются как переменные итерации. Примечание. Без параметра маркера ключ /F проверяет только первый маркер.

Разбор файлов состоит в чтении вывода, строки или содержимого файла, разбиении его на отдельные строки текста и разборе каждой строки на ноль или маркеры. Цикл программы for затем вызывается с переменной итерации, установленной в маркер. По умолчанию /F передает первый отделенный пробелом элемент из каждой строки каждого файла. Пустые строки пропускаются. Используется также другой синтаксис.
for /F ["КлючевыеСловаРазбора"] {%% | %}переменная lin (МножествоИменФайлов) do команда [ПараметрыКоманднойСтроки]
for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in ("СимвольнаяСтрока") do команда [ПараметрыКоманднойСтроки]
for /F ["КлючевыеСловаРазбора"] {%% | %}переменная in ('команда') do команда [ПараметрыКоманднойСтроки]

Аргумент МножествоИменФайлов задает одно или несколько имен файлов. Каждый файл открывается, считывается и обрабатывается до перехода к следующему файлу параметра МножествоИменФайлов. Чтобы переопределить стандартное поведение разбора, укажите параметр "КлючевыеСловаРазбора". Это строка, заключенная в кавычки, которая содержит одно или несколько ключевых слов для указания различных режимов разбора.

Если используется параметр usebackq, используйте один из приведенных ниже синтаксисов:
for /F ["usebackqКлючевыеСловаРазбора"] {%% | %}переменная in ("МножествоИменФайлов") do команда [ПараметрыКоманднойСтроки]
for /F ["usebackqКлючевыеСловаРазбора"] {%% | %}переменная in ('СимвольнаяСтрока') do команда [ПараметрыКоманднойСтроки]
for /F ["usebackqКлючевыеСловаРазбора"] {%% | %}переменная in ('команда') do команда [ПараметрыКоманднойСтроки]

В приведенной ниже таблице перечислены ключевые слова разбора, которые используются для параметра КлючевыеСловаРазбора.

Ключевое слово Описание

eol=c

Задает символ конца строки (только один символ).

skip=N

Задает число строк, пропускаемых в начале файла.

delims=xxx

Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.

tokens=X,Y,M-N

Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма M-N задает диапазон, указывающий элементы с M-го по N-ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.

usebackq

Задает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов. Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.

Подстановка переменных
Были расширены модификаторы подстановок для ссылок на переменные в for. Приведенная ниже таблица перечисляет варианты синтаксических конструкций (на примере переменной I).

Переменная с модификатором Описание

%~I

Расширение %I, которое удаляет окружающие кавычки ("").

%~fI

Расширение %I до полного имени пути.

%~dI

Замена %I именем диска.

%~pI

Замена %I на путь.

%~nI

Замена %I одним именем файла.

%~xI

Замена %I расширением имени файла.

%~sI

Замена путем, содержащим только короткие имена.

%~aI

Замена %I атрибутами файла.

%~tI

Замена %I временем модификации файла.

%~zI

Замена %I размером файла.

%~$PATH:I

Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

Приведенная ниже таблица перечисляет комбинации модификаторов, которые можно использовать для получения более сложных результатов.

Переменная с объединенными модификаторами Описание

%~dpI

Замена %I именем диска и путем.

%~nxI

Замена %I именем файла и расширением.

%~fsI

Замена %I полным именем пути с короткими именами.

%~dp$PATH:I

Поиск в каталогах, перечисленных в переменной среды PATH, и замена %I именем диска и путем первого найденного файла.

%~ftzaI

Замена %I строкой, аналогичной результату работы команды dir.

В приведенных выше примерах %I и PATH могут быть заменены другими допустимыми значениями. Допустимое имя переменной for прекращает синтаксис %~.

Использование прописных букв в именах переменных, например %I, может улучшить восприятие программы и позволит избежать недоразумений с модификаторами, в которых строчные и прописные буквы не различаются.

Разбор строки
Конструкция for /F может быть использована непосредственно для строки. Для этого поместите параметр МножествоИменФайлов между скобками в одиночные кавычки ('МножествоИменФайлов'). Параметр МножествоИменФайлов будет воспринят как одиночная строка ввода из файла и будет разобран.

Разбор вывода
Команду for /F можно использовать для разбора вывода команды. Для этого поместите параметр МножествоИменФайлов между скобками в обратные кавычки. Он будет воспринят как командная строка, которая передается дочернему интерпретатору командной строки Cmd.exe, а результаты работы команды помещаются в памяти и разбираются, как если бы они являлись файлом.

[Примеры]

В пакетных файлах используется следующий синтаксис для команды for:
for %%переменная in (множество) do команда [ПараметрыКоманднойСтроки]

Чтобы отобразить содержимое всех файлов, имеющих разрешение DOC или TXT, в текущем каталоге с помощью заменяемой переменной %f, введите следующую команду:
for %f in (*.doc *.txt) do type %f

В предыдущем примере каждый файл с расширением .doc или .txt в текущем каталоге будет подставляться вместо переменной %f, пока не будет выведено содержимое всех файлов. Для использования этой команды в пакетном файле нужно заменить каждую команду %f на %%а. В противном случае переменная игнорируется и выводится сообщение об ошибке.

Чтобы произвести разбор файла, игнорируя комментарии, можно использовать следующую команду:
for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

Данная команда производит разбор каждой строки в файле Myfile.txt, игнорируя строки, начинающиеся с точки с запятой, и передает второй и третий элементы из каждой строки в тело цикла команды FOR. Элементы разделяются запятыми или пробелами. Тело инструкции FOR использует %i для получения второго элемента, %j для получения третьего элемента и %k для получения оставшихся элементов в строке. Если имена файлов содержат пробелы, их следует заключать в кавычки (например, "ИмяФайла"). Для использования кавычек необходима команда usebackq. В противном случае кавычки рассматриваются как определение символьной строки для разбора.

Переменная %i объявлена явно в инструкции FOR. Переменные %j и %k объявлены явно при использовании tokens=. С помощью tokens= можно указать до 26 элементов, если это не вызовет попытки объявить переменную с именем, большим буквы "z" или "Z".

Для разбора вывода команды с помощью помещения параметра МножествоИменФайлов в скобки можно использовать следующую команду (пример выводит список имен всех переменных окружения):
for /F "usebackq delims==" %i IN (`set`) DO @echo %i

Ищем в директориях файлы с расширением html содержащие строку google:
for /R %f in (*.html) do @findstr /m "google" %f

FOR /L
выполнить команду для диапазона чисел
Синтаксис
FOR /L %%parameter IN (start,step,end) DO command
Где
   start      первое число (включительно)
   step       инкремент числа для каждого шага
   end        последнее число (включительно)
   command    выполняемая команда, здесь же указываются параметры командной строки для неё
   %%parameter изменяемый при каждой прокрутке цикла параметр (переменная цикла)

Внутри командного файла в качестве параметра используйте %%G, а в командной строке %G (такие уж Микрософт придумал правила). (20,-5,10) будет генерить последовательность 20 15 10, а (1,1,5) последовательность 1 2 3 4 5.

Пример
FOR /L %%G IN (1,1,5) DO echo %%G

Можно использовать нечисловой список, например:
FOR %%G IN (Sun Mon Tue Wed Thur Fri Sat) DO echo %%G

[Другие команды for]

FOR - цикл по всем файлам в одной директории (исключая её подкаталоги)
FOR /R - цикл по всем файлам, включая подкаталоги
FOR /D - цикл через несколько папок
FOR /F - цикл через слова в текстовом файле или через вывод команды

syntax-FOR-Files
     FOR %%parameter IN (set) DO command
syntax-FOR-Files-Rooted at Path
     FOR /R [[drive:]path] %%parameter IN (set) DO command
syntax-FOR-Folders
     FOR /D %%parameter IN (folder_set) DO command
syntax-FOR-List of numbers
     FOR /L %%parameter IN (start,step,end) DO command
syntax-FOR-File contents
     FOR /F ["options"] %%parameter IN (filenameset) DO command
     FOR /F ["options"] %%parameter IN ("Text string to process") DO command
syntax-FOR-Command Results
     FOR /F ["options"] %%parameter IN ('command to process') DO command

[Связанные с for команды]

FORFILES (w2003 Server) - выборка списка файлов из директории для отображения или использования при обработке в bat-файле
GOTO метка - прямой переход на строку в командном файле, помеченную строкой :метка
IF - условное выполнение команды

[Equivalent Linux BASH commands]

for - Expand words, and execute commands
case - Conditionally perform a command
eval - Evaluate several commands/arguments
if - Conditionally perform a command
gawk - Find and Replace text within file(s)
m4 - Macro processor
until - Execute commands (until error)
while - Execute commands 

[Условные обозначения форматирования]

Формат Описание

Курсив

Сведения, вводимые пользователем

Полужирный шрифт

Элементы, вводимые без изменений

Многоточие (...)

Параметр может быть введен в командной строке несколько раз

В квадратных скобках ([])

Необязательные элементы

В фигурных скобках ({}), варианты, разделенные вертикальной линией (|). Пример: {even|odd}

Набор вариантов, из которых необходимо выбрать один

Courier font

Программа или выходные данные

Последнее обновление ( 03.10.2010 )
 

Комментарии  

  1. #2 Алексей
    2011-06-1214:54:18 Очень помогли. Спасибо
  2. #1 Стас
    2011-01-2319:01:53 простой парсинг файла
    присвоить переменной именованный параметр из файла

    FOR /F "tokens=1,2" %%I IN (c:tt.txt) DO (
    if %%I==myparam: set result=%%J
    )

    echo %result%
    pause

    содержимое файла tt.txt

    tttt: c:j
    myparam: c:jj.jpg
    sdfsd: а
    dffdfd: tt

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2023