Usebackq delims что это
Команда FOR используется для выполнения команды, заданной в виде параметра, для каждого элемента из набора. В качестве элементов могут использоваться файлы, каталоги, наборы строк.
Формат командной строки:
FOR %переменная IN (набор) DO команда [параметры]
. В пакетных файлах для команды FOR используется запись
Поддерживаются также дополнительные форма команды FOR:
FOR /D %переменная IN (набор) DO команда [параметры]
Ключ /D задает в качестве набора имена каталогов (не файлов).
FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]
FOR /L %переменная IN (начало,шаг,конец) DO команда [параметры]
FOR /F [«ключи»] %переменная IN (набор-файлов) DO команда [параметры]
FOR /F [«ключи»] %переменная IN («строка») DO команда [параметры]
FOR /F [«ключи»] %переменная IN (‘команда’) DO команда [параметры]
FOR /F «eol=; tokens=2,3* delims=, » %i in (myfile.txt) do @echo %i %j %k
Команда FOR /F может также использоваться для обработки явно заданной строки, заключенной в одиночные кавычки и указанной в качестве параметра в скобках. Она будет разобрана так же, как одиночная строка, считанная из входного файла.
FOR /F «usebackq delims==» %i IN (`set`) DO @echo %i,
В команде FOR возможно использование ссылок на переменные. Допускается применение следующих синтаксических конструкций:
При объединении нескольких операторов можно получить следующие результаты:
В приведенных выше примерах переменные I и path можно заменить на другие допустимые значения. Синтаксическая конструкция с символами
заканчивается допустимым именем переменной цикла FOR.
При использовании команды FOR в командных файлах, если внутри цикла нужно выполнить более одной команды, то они заключаются в скобки:
@echo OFF
for /L %%I in (1,1,5) DO (
echo FIRST%%I
ECHO LAST%%I
)
После чего, можно обрабатывать принимаемые переменными значения внутри цикла, используя вместо знаков процента восклицательные знаки. Синтаксически, использование обоих разделителей допускается, но результаты этого использования будут разными, что наглядно демонстрируется следующим командным файлом:
Команда set VAR=after выполняется внутри подпрограммы, ограниченной скобками и, если убрать команду Setlocal EnableDelayedExpansion или не использовать для получения значения переменной VAR восклицательные знаки, ее значение останется старым ( тем, что было установлено до входа в цикл команды FOR ).
Данная особенность реализации командного процессора Windows нередко приводит к неожиданным результатам при использовании групп команд, объединенных скобками в конструкциях FOR и IF и тогда, когда значение какой-либо переменной изменяется внутри цикла с одной командой. Например, для получения списка файлов текущего каталога такой командный файл работать не будет:
set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%
Setlocal EnableDelayedExpansion
set LIST=
for %%i in (*) do set LIST=!LIST! %%i
echo %LIST%
Теперь, значение переменной LIST внутри цикла FOR будет изменяться, последовательно принимая значения имен файлов, разделенных пробелом ( set LIST=!LIST! %%i ).
Эту особенность реализации CMD нужно учитывать и при использовании значений системных переменных внутри циклов, как например, переменной ERRORLEVEL:
В этой статье мы рассмотри как используется цикл командной строки for для обработки текстовых строк и файлов. Тут будет фигурировать ключ /f, который меняет логику работы цикла командной строи (cmd) for и позволяет производить разбор любого текста по полочкам, так сказать.
Цикл cmd for – обработка текста
Для обработки текста или содержимого текстового файла применяется следующая конструкция:
for /f [«параметры»] %%переменная in (источник) do (оператор)
Тут “параметры” задают параметры поиска, мы их рассмотрим ниже, “источник” – тут нужно указать или путь к текстовому файлу, или текст, или вывод команд, “оператор” – тут собственно, находятся команды для обработки текста. Сам текст можно хранить в переменной, имя которой мы зададим в качестве источника.
Значение “параметры” может быть одним или комбинацией таких параметров:
eol – позволяет задать признак концевого комментария (end-of-line comment character). Весь текст, что будет находиться после него, будет приниматься за комментарий, например,“eol=#” – тут символ # является признаком концевого комментария. Собственно, комментарий не будет обрабатываться.
skip – позволяет в цикле cmd for задать количество строк, которые нужно пропустить, счет идет с начала файла, например, “skip=10” – в данном случае будут пропущены строки от первой до десятой.
delims – параметр позволяет задать дополнительные разделители строки на подстроки. Так, стандартными разделителями является пробел и символ табуляции. Например, “delims=. ” – тут мы определили, что запятые, точки и двоеточия являются разделителями.
Для дополнительной переменной, как и для переменной инициализации, в качестве имени указывается латинская буква, большая или маленькая. Значения можно указывать как через запятые, например, “tokens=1,4, 9” – первый, четвертый и девятый элемент, так и через диапазон, например, “tokens=4-11” – с четвертого по одиннадцатый. Можно комбинировать: “tokens=4-10,15,20” – с четвертого по десятый, а также, пятнадцатый и двадцатый элемент. Если мы укажем в качестве последнего значения звездочку, то создастся еще одна переменная, которая будет хранить в себе все остальные элементы (строки) текста.
usebackq – данный параметр является довольно интересным и полезным, так как позволяет выполнять команды, передав их как параметр. Включив этот параметр, двойные кавычки будут применяться для имен файлов и пути к ним, обратные кавычки (`), они находятся на той же кнопке, что и символ (
) – для исполняемых команд, а одинарные кавычки – для литеральных строк.
Хорошо, теперь можно рассмотреть цикл cmd for и работу с ним на практике.
Допустим, у нас есть файл test.txt, в котором прописаны такие строки:
100 200 300
#это комментарий
400 500 600
10; 20; 30;
Попробуем выполнить такой код:
@echo off for /F «eol=#» %%A in (d:\work\test.txt) do echo %%A
На выходе функция echo выведет:
Как видим, строка с комментарием не вывелась, но и остальные строки вывелись не полностью, что бы это исправить, напишем так:
@echo off for /F «eol=# tokens=*» %%A in (d:\work\test.txt) do echo %%A
Бинго, теперь нам вывело все строки полностью, кроме строки с комментариями, так как мы указали в параметре tokens значение *, то есть все. В предыдущем примере сценарий принимал пробелы как разделители.
Теперь запишем в текстовый файл такой текст:
Ukraina-Kijev-grivna-salo
Rossija-Moskva-rubl-bliny
Belorussija-Minsk-zajec-kartoska
Chechija-Praga-krona-pivo
@echo off for /f «tokens=1-4 delims=-» %%A in (d:\work\test.txt) do ( (@echo Strana:%%A Stolica:%%B Valuta:%%C Produkt:%%D) & Echo.)
Тут мы указали, что разделителем является тире, и указали, что надо обработать первые четыре поля строки, каждое из которых хранится в отдельной переменной. Как видим, в цикле for cmd идет обработка каждой строки из текста, на выходе мы получим:
Strana:Ukraina Stolica:Kijev Valuta:grivna Produkt:salo
Strana:Rossija Stolica:Moskva Valuta:rubl Produkt:bliny
Strana:Belorussija Stolica:Minsk Valuta:zajec Produkt:kartoska
Strana:Chechija Stolica:Praga Valuta:krona Produkt:pivo
Я специально вставил между строк пустую (echo.) что бы было лучше видеть.
Осталось рассмотреть пример с параметром usebackq:
@echo off set get_dir=d:\work\hello.txt for /f «usebackq» %%A in (`echo Hello, Wold ^>^> «%get_dir%»`) do echo OK type %get_dir% set get_dir=
В данном случаем мы выполняем команду: записываем фразу “Hello, Wold” в текстовый файл, путь к которому содержится в переменной get_dir. В конце выводим содержимое файла и удаляем переменную.
Знаю, знаю, мало примеров, ничего, я исправлюсь…
Спасибо за внимание. Автор блога Владимир Баталий
Статья [CMD] Циклические операции и примеры (команда FOR)
Dragokas
Very kind Developer
Циклическиe операции FOR
Командой FOR задаётся список команд, которые выполняются с КАЖДЫМ элементом набора.
Набор * пишется внутри IN (. )
Список команд пишется внутри DO (. )
Командная строка выполняет эти команды раз за разом, при этом текущий элемент набора находится в переменной, заданной после %% (назовём ее переменной цикла).
Для команды For без ключей набором может являться :
1) Маска файлов* (или путь + маска файлов)
— в двойных кавычках, или без них:
IN («C:\Folder 1\Doc_31-12-*.txt»)
Результат: тот же. Но поиск ведется в каталоге C:\Folder 1 (заметьте с пробелом в имени);
имя файла начинается на Doc_31-12-
2) Строка
— в двойных кавычках, или без них:
(тильда) при раскрытии переменной цикла %%
*О других модификаторах переменной цикла можно почитать здесь и здесь.
3) еще есть смешанный тип. Это когда в наборе стоит маска (1-й описанный тип), а через пробел Строка (2 тип). ведет себя вполне ожидаемо, но вряд ли найдет себе применение.
О наборах для FOR с ключем /F далее в нижнем спойлере.
выведет все строки файла 1.txt, который находится в корне диска C.
но такая конструкция восприняла бы пробел в имени как определение нового файла, поэтому UseBackQ более приемлем.
Виды наборов для FOR /F:
1) Набор файлов (задание маски недопустимо!)
Функционал: чтение содержимого файла(ов) построчно в переменную цикла!
Принцип работы: источником для разбиения по разделителю (delims) является содержимое файла, заданного внутри IN (. ) или файлов, если они заданы через пробел.
Исключение: принятый по-умолчанию разделитель (пробел и знак табуляции) для этой конструкции цикла не применяется.
2) Строка (допускаются практически любые символы)
3) Команда (сначала выполняется она, а уже ее результаты обрабатываются циклом как строка(-и))
Результат: выведет содержимое файла 1.txt из каталога c:\folder 1
(заметьте, в имени папки есть пробел).
Результат такой же.
Детальную справку можно получить, введя в консоль команду FOR /?
В отличие, от FOR без ключа, в FOR /F все токены (все подстроки одной строки) попадают сразу В ПЕРВУЮ ИТЕРАЦИЮ цикла.
Они будут распределены по РАЗНЫМ переменным цикла, идущим в алфавитном порядке*, начиная с буквы, заданной после FOR /F %%
Usebackq delims что это
Выполняет указанную команду для каждого файла в наборе файлов.
Синтаксис
Параметры
Параметр | Описание |
---|---|
Обязательный элемент. Представляет заменяемый параметр. Используйте один знак процента ( % ), чтобы выполнить команду % в командной строке. Используйте двойные знаки процента ( %% ) для выполнения команды %% в пакетном файле. Переменные чувствительны к регистру и должны быть представлены в алфавитном значении, например % a, % bили % c. | |
( ) | Обязательный элемент. Указывает один или несколько файлов, каталогов или текстовых строк или диапазон значений, по которым должна выполняться команда. Необходимо поставить скобки. |
Обязательный элемент. Указывает команду, которую нужно выполнить для каждого файла, каталога или текстовой строки, или диапазон значений, включенных в набор. | |
Задает параметры командной строки, которые необходимо использовать с указанной командой. | |
/? | Отображение справки в командной строке. |
Комментарии
Эту команду можно использовать в пакетном файле или непосредственно в командной строке.
К команде for применяются следующие атрибуты:
Эта команда заменяет % variable или %% variable с каждой текстовой строкой в указанном наборе до тех пор, пока указанная команда не обработает все файлы.
В именах переменных учитывается регистр, глобальная и не более 52 может быть активна за один раз.
Можно использовать несколько значений для переменной в сложных пакетных файлах для различения разных заменяемых переменных.
Параметр Set может представлять одну группу файлов или несколько групп файлов. Можно использовать подстановочные знаки ( * и * для указания набора файлов. Ниже приведены допустимые наборы файлов.
В и не имеют параметров, но их необходимо использовать с этой командой. Если опустить одно из этих ключевых слов, появится сообщение об ошибке.
Если расширения команд включены (по умолчанию), поддерживаются следующие дополнительные формы для :
Только каталоги: Если параметр SET содержит подстановочные знаки ( или ?), указанная команда выполняется для каждого каталога (вместо набора файлов в указанном каталоге), соответствующего заданному набору. Синтаксис:
Итерация диапазона значений: Используйте итерационную переменную, чтобы задать начальное значение (Start#), а затем пошаговое задание диапазона значений до тех пор, пока значение не превысит установленное конечное значение (End#). /l выполняет итеративный вызов, сравнивая Start# с End#. Если Start# меньше, чем End#, команда будет выполнена. Когда итерационная переменная превышает End#, Командная оболочка завершает цикл. Можно также использовать отрицательный шаг# для прохода по диапазону по убыванию значений. Например, (1, 1, 5) формирует последовательность 1 2 3 4 5, а (5,-1, 1) формирует последовательность 5 4 3 2 1. Синтаксис:
Анализ файлов состоит из чтения выходных данных, строки или содержимого файла, а затем разбивает их на отдельные строки текста и анализирует каждую строку в ноль или более маркеров. Затем цикл for вызывается с итерационным значением переменной, заданным для маркера. По умолчанию /f передает первый пустой отделенный маркер из каждой строки каждого файла. Пустые строки пропускаются.
Аргумент Set указывает одно или несколько имен файлов. Каждый файл открывается, считывается и обрабатывается перед переходом к следующему файлу в наборе. Чтобы переопределить поведение при синтаксическом анализе по умолчанию, укажите парсингкэйвордс. Это строка в кавычках, содержащая одно или несколько ключевых слов для указания различных параметров анализа.
В следующей таблице перечислены ключевые слова синтаксического анализа, которые можно использовать для парсингкэйвордс.
Ключевое слово | Описание |
---|---|
конца строки = | Задает символ конца строки (всего один символ). |
пропустить = | Указывает число пропускаемых строк в начале файла. |
делимс = | Задает набор разделителей. Это заменяет набор разделителей по умолчанию пробела и табуляции. |
токены = | Указывает, какие токены из каждой строки должны передаваться в цикл for для каждой итерации. В результате выделяются дополнительные имена переменных. m-n указывает диапазон от mдо n-го маркера. Если последним символом в строке tokens = является звездочка ( ), выделяется дополнительная переменная и получается оставшийся текст в строке после последнего проанализированного маркера. |
усебаккк | Задает выполнение строки в кавычках в виде команды, использование строки с одной кавычкой в качестве литеральной строки или для длинных имен файлов, содержащих пробелы, позволяет заключать имена файлов в двойные кавычки. |
Подстановка переменных: В следующей таблице перечислены необязательные синтаксисы (для любой переменной 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 в полное имя пути с краткими именами. |
% В приведенных выше примерах можно заменить %I и Path другими допустимыми значениями. Допустимое имя переменной завершает синтаксис. Синтаксический анализ выходных данных: Можно использовать команду для анализа выходных данных команды путем помещения обратной кавычки между круглыми скобками. Он рассматривается как Командная строка, которая передается дочернему Cmd.exeу. Выходные данные фиксируются в памяти и анализируются так, как если бы это был файл. ПримерыЧтобы использовать для в пакетном файле, используйте следующий синтаксис: Чтобы выполнить синтаксический анализ файла, игнорируя строки с комментариями, введите: Чтобы проанализировать выходные данные команды, заставив в скобки заданную команду, введите: Usebackq delims что этоВопросесть тесктовик в котором то что мне нужно разделено символом кавычек «. Как мне в BAT’нике вынуть то что мне нужно? FOR /F «tokens=2 usebackq delims=кавычки» %%i in ( «c:\file.txt» ) do echo %%i ОтветыВообще по уму в скриптинг бы этот вопрос. А вообще ответ нашелся простым запросом в Гугль Все ответыВообще по уму в скриптинг бы этот вопрос. А вообще ответ нашелся простым запросом в Гугль скрипт оказался не полноценным: содержание файла test.txt К комментарию о неполноценности. Телепатов нема, что вам там конкретно нужно парсить никто не знает. Вам привели пример который нужно уже Вам допилить напильником. В даннном случае как промежуточный разделитель(до этого использовался пробел\табуляция) испольюзуются запятые.
|