- Вопрос или проблема
- Как выполнить команду во всех подкаталогах в пакетном файле?
- for /r – Цикл по файлам (Рекурсивно по подкаталогам)
- Дополнительное чтение
- Ответ или решение
- Как выполнить команду во всех подкаталогах с помощью пакетного файла
- Шаги для реализации
- Пример пакетного файла
- Объяснение кода
- Заключение
- Рекомендуемые ресурсы
Вопрос или проблема
У меня есть пакетный файл, который выглядит так:
IF EXIST icon.ico (
attrib -S -H -R desktop.ini
echo f | xcopy /H /Y "%~dp0desktop.ini.txt" desktop.ini
attrib +S +H +A desktop.ini
)
Это идеально подходит для моих нужд.
Мой вопрос: как заставить это работать во всех подкаталогах?
Как выполнить команду во всех подкаталогах в пакетном файле?
Вы можете использовать for /r
для этого.
Используйте следующий пакетный файл:
for /r "starting_directory" %%a in (.) do (
pushd %%a
if exist icon.ico (
attrib -s -h -r desktop.ini
echo f | xcopy /h /y "%~dp0desktop.ini.txt" desktop.ini
attrib +s +h +a desktop.ini
)
popd
)
for /r – Цикл по файлам (Рекурсивно по подкаталогам)
Синтаксис
FOR /R [[диск:]путь] %%параметр В (набор) DO команда
Ключ
диск:путь
: Древо папок, в котором находятся файлы.
набор
: Набор одного или нескольких файлов. Должны использоваться символы подстановки.
Если (набор) – это символ точки (.), то FOR будет
циклом по каждой папке.
команда
: Команда(ы) для выполнения, включая любые
параметры командной строки.%%параметр` : Заменяемый параметр:
в пакетном файле используйте %%G (в командной строке %G)
Источник for /r – Цикл по файлам (Рекурсивно по подкаталогам).
Дополнительное чтение
- Индекс A-Z командной строки Windows CMD – Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- for /r – Цикл по файлам (Рекурсивно по подкаталогам).
Ответ или решение
Как выполнить команду во всех подкаталогах с помощью пакетного файла
Вам нужно выполнить команды в каждом подкаталоге, используя пакетный файл Windows. Для решения данной задачи удобен цикл for /r
, который рекурсивно проходит по всем подкаталогам заданной директории. В представленном ниже решении вы узнаете, как адаптировать ваш текущий скрипт для работы во всех подкаталогах.
Шаги для реализации
-
Инициализация цикла: Сначала вам нужно указать начальную директорию для рекурсии. Подходящий синтаксис будет следующим:
for /r "начальная_директория" %%a in (.) do (
-
Переход в директорию: Используйте команду
pushd
для смены текущей директории на ту, что указана в%%a
. -
Логика выполнения команд: Внутри цикла вы можете вставить ваши команды, аналогично тому, как это реализовано в вашем изначальном скрипте.
-
Возврат в родительскую директорию: После выполнения команд в подкаталоге используйте команду
popd
для возвращения к родной директории.
Пример пакетного файла
Ниже представлен пример пакетного файла, адаптированного для выполнения ваших команд во всех подкаталогах:
@echo off
rem Установите начальную директорию
set "starting_directory=C:\путь\к\вашей\директории"
for /r "%starting_directory%" %%a in (.) do (
pushd %%a
if exist icon.ico (
attrib -S -H -R desktop.ini
echo f | xcopy /H /Y "%~dp0desktop.ini.txt" desktop.ini
attrib +S +H +A desktop.ini
)
popd
)
Объяснение кода
@echo off
: Отключает вывод команд в консоль для более аккуратного отображения.set "starting_directory=C:\путь\к\вашей\директории"
: Устанавливает путь, с которого начинать рекурсию.for /r "%starting_directory%" %%a in (.)
: Цикл проходит по каждому подкаталогу в заданной директории.pushd %%a
: Переход в текущий подкаталог%%a
.if exist icon.ico
: Проверяет наличие файлаicon.ico
.attrib
иxcopy
: Ваша логика для работы с файлами.popd
: Возврат в родительскую директорию после выполнения команд.
Заключение
Используя этот подход, вы сможете эффективно выполнять команды во всех подкаталогах, сохраняя ту же функциональность, что и в вашем исходном скрипте. Это решение хорошо подходит для автоматизации рутинных задач в Windows, например, настройки атрибутов файлов или копирования шаблонов. Не забудьте менять путь в строке set
на тот, который вам нужен.
Рекомендуемые ресурсы
- Для более детальной информации о командах Windows CMD и о том, как они работают, вы можете ознакомиться со следующими ресурсами:
Эти ресурсы помогут вам лучше понять команды и их возможности, а также оптимизировать ваши скрипты для различных задач.