Цикл bat for: Циклы в языке сценариев Batch

findstr | Microsoft Learn






Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья


Выполняет поиск шаблонов текста в файлах.

findstr [/b] [/e] [/l | /r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/f:<file>] [/c:<string>] [/g:<file>] [/d:<dirlist>] [/a:<colorattribute>] [/off[line]] <strings> [<drive>:][<path>]<filename>[ ...]

Параметры

ПараметрОписание
/bСоответствует шаблону текста, если он находится в начале строки.
/eСоответствует шаблону текста, если он находится в конце строки.
/lОбрабатывает строки поиска буквально.
/rОбрабатывает строки поиска как регулярные выражения. Это параметр по умолчанию.
/sВыполняет поиск по текущему каталогу и всем подкаталогам.
/iИгнорирует регистр символов при поиске строки.
/xПечатает строки, которые точно соответствуют.
/vПечатает только строки, не содержащие совпадения.
/nВыводит номер каждой строки, которая соответствует.
/mВыводит только имя файла, если файл содержит совпадение.
/oВыводит смещение символов перед каждой соответствующей строкой.
/pПропускает файлы с непечатаемыми символами.
/off[line]Не пропускает файлы, для которых задан автономный атрибут.
/F:<file>Возвращает список файлов из указанного файла.
/c:<string>Использует указанный текст в качестве строки поиска литерала.
/Г:<file>Возвращает строки поиска из указанного файла.
/D:<dirlist>Выполняет поиск по указанному списку каталогов. Каждый каталог должен быть разделен точкой с запятой (;), например dir1;dir2;dir3.
/a:<colorattribute>Задает атрибуты цвета с двумя шестнадцатеричными цифрами. Введите color /? для получения дополнительных сведений.
<strings>Указывает текст для поиска в имени файла. Обязательный.
[\<drive>:][<path>]<filename>[...]Указывает расположение и файл или файлы для поиска. Требуется по крайней мере одно имя файла.
/?Отображает справку в командной строке.
  • Все параметры командной строки findstr должны предшествовать строкам и имени файла в командной строке.

  • Регулярные выражения используют как литеральные символы, так и метасимвы для поиска шаблонов текста, а не точные строки символов.

    • Литеральный символ — это символ, который не имеет особого значения в синтаксисе регулярных выражений; вместо этого он соответствует вхождения этого символа. Например, буквы и цифры являются литеральными символами.

    • Метасимвол — это символ с особым значением (оператор или разделитель) в синтаксисе регулярных выражений. class]Обратный класс — любой символ, не в наборе.[x-y]Range — любые символы в указанном диапазоне.\xEscape — литеральное использование метасимвы.\<stringНачальная позиция слова — начало слова.string\>Конечная позиция слова — конец слова.

      Специальные символы в синтаксисе регулярных выражений обладают наибольшей силой при совместном использовании. Например, используйте сочетание символов с подстановочными знаками (.) и повтора (*) для сопоставления любой строки символов: .*

      Используйте следующее выражение как часть выражения большего размера, чтобы сопоставить любую строку, начинающуюся с b и заканчивая ing: b.*ing

  • Для поиска нескольких строк в наборе файлов необходимо создать текстовый файл, содержащий каждый критерий поиска в отдельной строке. *FOR *.bas

    Чтобы получить точный список файлов, которые требуется найти в текстовом файле, используйте условия поиска в файле stringlist.txt, чтобы выполнить поиск в файлах, перечисленных в filelist.txt, а затем сохранить результаты в файле results.out, введите:

    findstr /g:stringlist.txt /f:filelist.txt > results.out
    

    Чтобы вывести список всех файлов, содержащих слово компьютер в текущем каталоге и всех подкаталогов, независимо от регистра, введите:

    findstr /s /i /m \<computer\> *.*
    

    Чтобы вывести список всех файлов, содержащих слово computer и любые другие слова, начинающиеся с comp (например, комплимент и конкурировать), введите:

    findstr /s /i /m \<comp.* *.*
    
    • Условные обозначения синтаксиса команд командной строки






    HSABAT 0 цикл 6300 мАч BAT-510 Аккумулятор для Acer Liquid Metal MT S120 (1/CP6/65/85) Φ Мобильные

    Все разделы

    Sale

    Special Price от 931. 88*

    8 Отзыв(ов) | Написать отзыв

    Доступность: На складе

    Продавец:

      HSABATOfficial Store

    Для получения более полной информации о стоимости и сроках доставки HSABAT 0 цикл 6300 мАч BAT-510 Аккумулятор для Acer Liquid Metal MT S120 (1/CP6/65/85) Φ Мобильные нажмите «Купить»…

    • В избранное
    • Сравнить
    • Email рассылка

    • Описание
    • Отзывы
    • Видео обзор



    HSABAT 0 цикл 6300 мАч BAT-510 Аккумулятор для Acer Liquid Metal MT S120 (1/CP6/65/85) Φ | Мобильные телефоны

    Эта батарея только дляAcer Liquid Metal MT S120 BAT-510 (1/CP6/65/85) SP516485SF-C

     

     



    Напоминание о кэшбэке: Что бы получить кешбек при покупке этого или другого товара на Aliexpress. Авторизуйтесь или зарегистрируйетсь в кэшбэк-сервисе, далее появиться подробная инструкция как получать кэшбэк при покупках на Алиэкспресс.

    Отзывы покупателей

    *о других товарах

    Блендер Bosch MSM87160 — Tmall

    Цена
    Стоимость
    Качество

    First Quality XX Store — отзывы. Все товары про…

    Цена
    Стоимость
    Качество

    GAOMON S620 6 5×4 дюйма 8192 уровень без батаре…

    Цена
    Стоимость
    Качество

    100 светодио дный солнечной энергии Акриловые М. ..

    Цена
    Стоимость
    Качество

    10 дюймов 4 ГБ + 32 Android 7 0 Tablet Pc Мобил…

    Цена
    Стоимость
    Качество

    Здесь вы можете оставить свой отзыв о данном товаре.

    Сегодня покупают

    Новые товары

    New

    New

    New

    New

    New

    New




    Показать еще

    8(800)9279-4888

    Themistokli Dervi 8, 1088, Nicosia, Cyprus

    >нуль) делать (
    echo Неверный файл: «%%J»
    вызвать alass. bat %1 «%%J» «%%J»
    )
    перейти :EOF

    Этот код был запущен на диске FAT32 со следующими файлами в текущем каталоге:

     Batman.Beyond.S01E01.1080p.BluRay.Remux.eng.srt
    Batman.Beyond.S01E01.Rebirth.Part.1.1080p.BluRay.x264.DTS-FGT.srt
    Batman.Beyond.S01E02.1080p.BluRay.Remux.eng.srt
    Бэтмен.За гранью.S01E02.Возрождение.Часть 2.1080p.BluRay.x264.DTS-FGT.srt
    Пример..mple!.S01E01.anotherName.DTS-FGT.srt
    Exa..mple!.S01E01.name.eng.srt
    пример.S01E02.anotherName-FGT.srt
    пример.S01E02.name.eng.srt
     

    Вывод без реального вызова alass.bat :

     Правильный файл: «Batman.Beyond.S01E01.1080p.BluRay.Remux.eng.srt»
    Неверный файл: «Batman.Beyond.S01E01.Rebirth.Part.1.1080p.BluRay.x264.DTS-FGT.srt»
    Правильный файл: «Batman.Beyond.S01E02.1080p.BluRay.Remux.eng.srt»
    Неверный файл: «Batman.Beyond.S01E02.Rebirth.Part.2.1080p.BluRay.x264.DTS-FGT.srt»
    Правильный файл: "Exa..mple!.S01E01.name.eng.srt"
    Неверный файл: "Пример..mple!.S01E01.anotherName.DTS-FGT.srt"
    Правильный файл: "example. S01E02.name.eng.srt"
    Неверный файл: "example.S01E02.anotherName-FGT.srt"
     

    Основной цикл FOR выполняется в фоновом режиме еще один cmd.exe с параметром /c командная строка в пределах ' добавлен в качестве дополнительных аргументов.

    Команда DIR , выполняемая этим вторым командным процессором, выводит все имена файлов в текущем каталоге, соответствующие шаблону подстановки *.eng.srt .

    Этот список перенаправляется на FINDSTR , который фильтрует список имен файлов на основе регулярного выражения \.S[0123456789][0123456789]*E[0123456789][0123456789]*\. . Таким образом, имя файла для обработки должно содержать строку, состоящую из

    1. и точки
    2. .

    3. без учета регистра буквы S
    4. одна или несколько цифр в диапазоне от 0 до 9
    5. без учета регистра буквы E
    6. одна или несколько цифр в диапазоне от 0 до 9
    7. больше точек.

    Все имена файлов, оканчивающиеся без учета регистра на .eng.srt и соответствующие критериям фильтра регулярных выражений, выводятся FINDSTR для обработки STDOUT фонового командного процесса и захвата cmd.exe обработки пакетного файла.

    Основной цикл FOR обрабатывает список имен файлов построчно после того, как запущенный процесс cmd.exe закрылся. Имена файлов могут содержать символы пробела, что является причиной использования параметра delims= для определения пустого списка разделителей, чтобы отключить поведение разделения строк по умолчанию для пробелов/табуляций. Имена файлов могут начинаться с точки с запятой, и по этой причине опция эол=| используется для определения вертикальной черты как символа конца строки, который не может содержать ни одно имя файла. Таким образом, каждое имя файла полностью присваивается указанной переменной цикла I

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

    Затем цикл FOR используется для удаления из имени файла строки после последней точки, которая является расширением файла в соответствии с определением Microsoft. Строка «расширение файла» проверена с FINDSTR , поскольку является частью, которая используется в качестве идентификатора, а также в качестве строки-разделителя между названием фильма и метаданными фильма в имени файла. Если регулярное выражение не возвращает положительное совпадение с текущей строкой «расширение файла», имя файла усекается в конце путем удаления текущего «расширения файла».

    Наконец, после выполнения одного или нескольких циклов обнаруживается начало имени файла, состоящее из названия фильма с нулем или более точек внутри и строки, соответствующей регулярному выражению. Итак, переменная окружения FileNameBegin для четырех примеров:

    1. Batman.Beyond.S01E01
    2. Бэтмен.За гранью.S01E02
    3. Пример!. S01E01
    4. например.S01E02

    Эта часть строки теперь используется для поиска соответствующего файла с неверными субтитрами, оканчивающимися без учета регистра строкой -FGT.srt . Это снова делается, запуская еще один cmd.exe для запуска DIR , чтобы найти этот файл.

    Использование команды DIR для получения списка совпадающих имен файлов, впервые загруженных в память, может быть важным в зависимости от того, что alass.bat делает с переданными именами файлов. Это особенно важно для файловых систем FAT, таких как FAT32 или exFAT , которые не хранят имена файлов в определенном локальном алфавитном порядке. Файловые таблицы файловой системы могут быть изменены при каждом вызове alass.bat , если этот пакетный файл изменяет srt , и это не очень хорошо при использовании FOR напрямую для обработки файлов. Это может привести к пропуску некоторых файлов srt или обработке некоторых файлов srt более одного раза или, в худшем случае, даже к бесконечному циклу выполнения. По этой причине используется DIR , выполняемый командным процессом в фоновом режиме, чтобы всегда получать список совпадающих имен файлов, который больше не изменяется, в то время как основной цикл FOR , а также последний цикл FOR запускают команды, которые возможно, приведет к изменению файловых таблиц файловой системы.

    Это решение определенно не является быстрым, но очень надежным решением и должно работать для всех названий фильмов и всех файловых систем, независимо от того, что делает alass.bat , пока этот командный файл не изменяет текущий каталог .

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

    • звонок /?
    • каталог /?
    • эхо /?
    • эндлокальный /?
    • выход/?
    • найтистр /?
    • для /?
    • перейти /?
    • если /?
    • комплект/?
    • локальный /?

    for loop — циклическое перебор строковых значений из bat-файла командной строки Windows

    спросил

    Изменено
    4 года, 1 месяц назад

    Просмотрено
    120 тысяч раз

    Я пытаюсь создать пакетный сценарий для своего компьютера с Windows, который перебирает список (строковых/десятичных) значений и использует каждое значение в качестве параметра внутри цикла.

    Ниже приведен пример простого цикла for, который я хотел бы использовать для отображения всех файлов различных версий (из моего списка)

     ЗА ? в ('1.1','1.2','2.4','3.9') сделать эхо V[value_from_for_loop].txt
     

    У меня возникли проблемы с тем, как пройтись по каждому элементу и использовать переменную в операторе echo.

    • окна
    • цикл for
    • командная строка

    1

     для %x в (1.1 1.2 2.4 3.9) выполнить эхо V%x.txt
     

    Для использования в пакетном файле необходимо удвоить % :

     для %%x в (1.1 1.2 2.4 3.9) выполнить эхо V%%x.txt
     

    3

    Ответ @Јοey отлично работает,

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

     @эхо выключено
    для %%x в (
            a.js
            хранилище.js
            логика.js
            main.js
            z.js
           ) делать (
             эхо имя вашего файла %%x
             echo "%%x" - крутое имя
             эхо. 
             эхо =-=-=-=-=-=
             эхо.
           )
     

    причина, по которой он выглядит как вертикальный список, заключается в том, что в него будет проще добавлять или удалять дополнительные элементы. (и «эхо» с «точкой» для одной пустой строки).

    вывод будет выглядеть так:

     C:\example>yourBatchName.cmd
    ваше имя файла a.js
    "a.js" - крутое имя
    =-=-=-=-=-=
    имя вашего файла — storage.js
    «storage.js» — крутое имя
    =-=-=-=-=-=
    имя вашего файла — logic.js
    «logic.js» — крутое имя
    =-=-=-=-=-=
    ваше имя файла main.js
    «main.js» — крутое имя
    =-=-=-=-=-=
    ваше имя файла z.js
    "z.js" - крутое имя
    =-=-=-=-=-=
     

    ** п.с. для списка имен файлов лучше использовать что-то вроде этого:

    для %%e в (*.dll) do (....

    Предположим, у вас есть очень длинный список значений, который будет очень неудобно вводить в командной строке. Кроме того, существует ограничение длины для DOS командная строка

    В этом случае значения могут храниться в произвольно длинном файле, по одному на строку Назовите его my-values. list с содержимым, подобным:

     1.1
    1,2
    2,4
    3,9
    3.9.1
    3.9.2
    3,91
    3.91.1
    ...
     

    Теперь вы можете прочитать переменные из этого текстового файла, строка за строкой:

     for /f "tokens=*" %a in (c:\path\to\my-values.list) выполнить эхо. Версия%~nxa.txt
     

    3

    Думаю, что-то вроде этого:

     для %x в (1.1 1.2 2.4 3.9) сделать (
        эхо V%x.txt
    )
     

    Это не позволит мне комментировать, но я хотел добавить здесь свои 2 цента.
    «do» должен находиться в той же строке, что и правая скобка команды «for». Другими словами, это будет работать:

     для %x в (1,1 1,2 2,4 3,9) выполнить эхо V%x.txt
     

    …но это не будет:

     для %x в (1.1 1.2 2.4 3.9)
        сделать эхо V%x.txt
     

    1

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя электронную почту и пароль

    Опубликовать как гость

    Электронная почта

    Обязательно, но не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.