Урок 8 по CMD — цикл for, работа с папками и подпапками

Урок 8 по CMD — цикл for, работа с папками и подпапками Командная строка

В этой статье мы рассмотрим как используется цикл for в командной строке (cmd) для групповой работы с каталогами. Как уже упоминалось, логику работы cmd цикла можно менять с помощью ключей, так, для обработки каталогов применяется ключ /D.

Стоит учитывать тот факт, что в данном случаем мы можем обработать все входящие на один уровень папки для заданного каталога, но не дальше, для обработки полный структуры, используется другой ключ — /R, примеры работы с которым мы рассмотрим по ходу статьи.

Фактически, с помощью цикла cmd for можно получить слепок всего дерева каталогов для заданного диска, и в групповом порядке их обработать.

Cmd цикл for – обработка корневых и вложенных папок

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

for /D %%переменная in (набор_каталогов) do (оператор)

Фактически, тут логика работы аналогична той, что используется при работе с файлами. Переменная набор_каталогов содержит путь к папке, содержимое которой нужно обработать. Только помните, что в данном случае мы получаем не список файлов, а каталогов. Мы также можем указать шаблон для поиска:

@echo offfor/d %%B in(%SystemRoot%*)doecho%%B

В данном случае функция echo выведет список всех папок, которые есть в системном каталоге (путь к нему, хранится в переменной (%SystemRoot%). Или такой вариант:

@echo offfor/d %%B in(%SystemRoot%S*)doecho%%B

Тут мы получим список лишь тех папок, имена которых начинаются на S.

Как и с файлами, можно указать список, используя в качестве разделителя пробел:

@echo offfor/D %%B in(%SystemRoot%*%TEMP%*)doecho%%B

Тут происходит вывод всех папок из системной и временной папки (переменная окружения %TEMP%).

А вот такая запись:

for/d %%B in(%SystemRoot%)doecho%%B

выведет путь к системному каталогу, заданному в переменной окружения %SystemRoot%. Аналогичный результат можно получить прописав:

echo%SystemRoot%

или

set SystemRoot

в первом случае мы используем функцию echo, а во втором ключевое слово set.

Можно совмещать различные вариации цикла cmd (командной строки), так, можно попробовать получить список всех заданных файлов, которые есть во вложенных каталогах текущей папки, например:

@echo offsetwork_dir=d:workfor/d %%B in(%work_dir%*)do(for%%C in("%%B*.txt")doecho%%C)setwork_dir=

В данном примере вначале сценария создается переменная work_dir, который присваивается путь d:work. Далее следует cmd цикл с ключом /d. Переменная B будет хранить пути ко всем вложенным каталога папки d:work. При нахождении вложенной папки идет обработка нового цикла cmd, который уже отвечает за поиск текстовых файлов в найденном подкаталоге. Результат как всегда выводится с помощью функции echo. В конце сценария мы удаляем переменную work_dir из переменной среды.

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

Cmd цикл for – обработка полной структуры

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

for /R [путь] %%переменная in (набор_файлов) do (оператор)

Видим, что тут уже фигурирует ключ R, после которого можно указать путь к папке или диску, структуру которого надо обработать. Если не указывать путь, то произойдет обработка текущей папки. Как и прежде, перед ключевым словом in нужно прописать переменную инициализации, а переменная набор_файлов может хранить имя файла или их список, заданный с помощь шаблона или через пробел:

@echo offfor/R %SystemRoot%%%B in(*.vbs *.js)doecho%%B

В данном случае происходит поиск файлов с расширением .vbs и .js во всей структуре системного каталога, заданного переменной окружения SystemRoot.

Можно даже извлечь список всех вложенных каталогов для заданной структуры:

@echo offfor/R %SystemRoot%/d %%B in(*)doecho%%B

В данном случае, мы использовали оба ключа /R и /D, а символ звездочки указывает на то, что нужно извлечь список абсолютно всех вложенных папок.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий