Урок 7 по CMD — цикл for, работа с файлами и значениями

Урок 7 по CMD — цикл for, работа с файлами и значениями Командная строка

В этой статье мы рассмотрим, как использовать конструкцию for в командной строке для перебора значений и файлов. Все примеры в статье я буду приводить с учетом, что код будет выполнятся в теле сценария, который, в свою очередь будет запускаться из консоли командной строки.

Лично я, сперва добавляю в переменную окружения PATH путь к каталогу, в котором находится сценарий:

set%PATH%;путь_к _каталогу

После этого я просто ввожу в консольном окне имя сценария, например, test.bat. Помните, что путь будет храниться в переменной окружения лишь в пределах текущего окна командной строки.

Командная строка for – перебор значений

Для перебора значений используется следующий синтаксис:

for /L %%переменная in (начало, шаг, конец) do (оператор)

Ключ /L говорит о том, что происходит перебор данных, далее следует имя переменной, в которую эти данные будут записываться. В круглых скобках нужно через запятую указать три параметра:

  • начало – начальное значение
  • шаг – тут мы указывает, насколько нужно увеличивать или уменьшать начальное значение при каждой итерации. То есть, если параметр содержит отрицательное число, то будет происходить уменьшение, иначе – увеличение параметра “начало”.
  • конец – тут нужно указать конечное значение, именно оно и будет определять, завершать цикл или нет. То есть, при каждой итерации происходит сравнивание начального и конечного параметра.

Давайте рассмотрим такой пример:

@echo offfor/L %%B in(0,1,5)doecho%%Becho.for/L %%B in(5,-1,0)doecho%%B

В данном сценарии используются два цикла for командной строки, первый задает диапазон цифр от 0 до 5 с шагом 1, второй – диапазон цифр от 5 до 0 с шагом -1. То есть, прямой и обратный порядок. Функция ЭХО будет в виде списка выводить содержимое переменной B. Команда “echo.” вставляем между списками пустую строку.

Теперь попробуем найти сумму чисел от 0 до 100:

@echo offsetsumm=0for/L %%B in(0,1,100)do set/A summ+=%%Becho%summ%setsumm=

Сначала мы отключаем вывод эхо-отображений. Потом мы объявляем переменную summ с помощью ключевого слова set и присваиваем ей ноль. Далее в цикле for задаем начальное значение в 0, шаг в 1 и конечное значение в 100.  Суммирование происходит в строке set/A summ+=%%B, тут к содержимому переменной summ будет добавляться содержимое переменной %%B. В конце мы выводим конечный результат и удаляем из окружения summ.

Теперь давайте посмотрим, как будет выглядеть код для нахождения факториала числа 5:

@echo offsetfact=1for/L %%B in(5,-1,1)do set/A fact*=%%Becho%fact%setfact=

Тут практически тот же самый синтаксис, за исключением того, что мы задали отрицательный шаг и использовали оператор *=.

Хорошо, теперь усложним задачу: найдем сумму чисел от 0 до 10, исключив из расчета числа 5, 7 и 9:

@echo offsetsumm=0for/L %%B in(0,1,10)do(if"%%B" neq "5"(if"%%B" neq "7"(if"%%B" neq "9" set/A summ+=%%B)))echo%summ%setsumm=

Как видим, для проверки условия мы использовали условный оператор if. К сожалению, в командной строке нет логических операторов тип “ИЛИ” и “И”, как например, в языках vbscript и jscript, поэтому нам пришлось создавать вложенные операторы if. В результате, мы получили число 34. Также обратите внимание на оператор “neq” – проверка условия типа “НЕ РАВНО”.

Командная строка for – работа с файлами

Для групповой работы с файлами используется следующий синтаксис цикла for командной строки:

for %переменная in (набор_файлов) do (оператор)

Базовый параметр тут переменная набор_файлов, которая может содержать:

  • отдельный файл, например, my_file.txt
  • групповой набор документов, заданный через шаблон, например, *.txt
  • список файлов, который разделяется пробелами, причем каждый элемент списка тоже может содержать шаблон, например, my_file.txt *.doc my*.avi

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

В следующем примере происходит вывод всех файлов из каталога d:work с расширением .txt:

@echo offfor%%В in(d:work*.txt)do(echo%%В)

Тут B является переменной инициализации, при каждой итерации ей будет присвоено путь, имя и расширение найденного текстового документа, а функция ЭХО сразу выведет информацию на экран. Потом снова, переменной B будет присвоено новое имя и снова произойдет вывод данных. Сам цикл работает до тех пор, пока не будут найдены все значения, заданные в условии.

Естественно, можно задать условие для вывода всех файлов с расширениями, например, .txt, .avi и .pdf.

@echo offsetwork_dir=d:workfor%%B in(%work_dir%*.txt %work_dir%*.avi %work_dir%*.pdf)do(echo%%B)setwork_dir=

В данном случае переменная work_dir содержит путь к папке d:work, в цикле командной строки for мы добавляем к переменной нужные расширения. В конце сценария происходит удаление переменной work_dir.

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

Можно попробовать получить список имен файлов и их размер:

@echo offfor%%B in(%SystemRoot%*.txt)do(echo%%B %%~zB)

Конструкция ~z позволяет получить размер файла в байтах.

Что бы использовать сразу цикл в командной строке, стоит вместо двух символов % прописывать один, например:

for%B in(%SystemRoot%*.txt)do(echo%B %%~zB)
Оцените статью
Технологии программирования и ведение блога
Добавить комментарий