Цикл 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 — любые символы в указанном диапазоне. \x
Escape — литеральное использование метасимвы. \<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]*\.
. Таким образом, имя файла для обработки должно содержать строку, состоящую из- и точки
- без учета регистра буквы
S
- одна или несколько цифр в диапазоне от 0 до 9
- без учета регистра буквы
E
- одна или несколько цифр в диапазоне от 0 до 9
- больше точек.
.
Все имена файлов, оканчивающиеся без учета регистра на
.eng.srt
и соответствующие критериям фильтра регулярных выражений, выводятся FINDSTR для обработки STDOUT фонового командного процесса и захватаcmd.exe
обработки пакетного файла.Основной цикл FOR обрабатывает список имен файлов построчно после того, как запущенный процесс
cmd.exe
закрылся. Имена файлов могут содержать символы пробела, что является причиной использования параметраdelims=
для определения пустого списка разделителей, чтобы отключить поведение разделения строк по умолчанию для пробелов/табуляций. Имена файлов могут начинаться с точки с запятой, и по этой причине опцияэол=|
используется для определения вертикальной черты как символа конца строки, который не может содержать ни одно имя файла. Таким образом, каждое имя файла полностью присваивается указанной переменной циклаI
Для каждого имени файла вызывается подпрограмма
ProcessFile
, которая сначала выводит текущее имя файла с правильными субтитрами.Затем цикл FOR используется для удаления из имени файла строки после последней точки, которая является расширением файла в соответствии с определением Microsoft. Строка «расширение файла» проверена с FINDSTR , поскольку является частью, которая используется в качестве идентификатора, а также в качестве строки-разделителя между названием фильма и метаданными фильма в имени файла. Если регулярное выражение не возвращает положительное совпадение с текущей строкой «расширение файла», имя файла усекается в конце путем удаления текущего «расширения файла».
Наконец, после выполнения одного или нескольких циклов обнаруживается начало имени файла, состоящее из названия фильма с нулем или более точек внутри и строки, соответствующей регулярному выражению. Итак, переменная окружения
FileNameBegin
для четырех примеров:-
Batman.Beyond.S01E01
-
Бэтмен.За гранью.S01E02
-
Пример!. S01E01
-
например.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
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.