Рекурсивно переименовывать файлы и папки - PullRequest
2 голосов
/ 06 марта 2012

Я прочитал эту запись и не могу выполнить свои требования.

Структура моей папки:

_TEMPLATE_
|_ _TEMPLATE_SUBFOLDER1
|   |_ _TEMPLATE_SUB_SUBFOLDER1
|   |   |_ _TEMPLATE_FILE11.txt
|   |   |_ _TEMPLATE_FILE12.xml
|   |_ _TEMPLATE_SUB_SUBFOLDER2
|   |   |_ _TEMPLATE_FILE21.txt
|   |   |_ _TEMPLATE_FILE22.xml
|   |_ TEMPLATE_SUB_SUBFOLDER3
|_ _TEMPLATE_SUBFOLDER2
    |_TEMPLATE_FILE3.xml

Я хочу заменить _TEMPLATE_ на желаемое имя например Stores так что результат будет

Stores
|_ StoresSUBFOLDER1
|   |_ StoresSUB_SUBFOLDER1
|   |   |_ StoresFILE11.txt
|   |   |_ StoresFILE12.xml
|   |_ StoresSUB_SUBFOLDER2
|   |   |_ StoresFILE21.txt
|   |   |_ StoresFILE22.xml
|   |_ StoresSUB_SUBFOLDER3
|_ StoresSUBFOLDER2
    |StoresFILE3.xml

Я искал в Интернете, есть возможность просматривать только файлы. и ни один из них не идет рекурсивное переименование Спасибо.

1 Ответ

4 голосов
/ 06 марта 2012

Не проверено, но я думаю, что это будет работать

@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%F in ('dir /b /ad /s _TEMPLATE_*') do (
  set "fname=%%~nxF"
  set "fpath=%%~dpF"
  setlocal enableDelayedExpansion
  ren "!fpath:_TEMPLATE_=Stores!!fname!" "!fname:_TEMPLATE_=Stores!"
  endlocal
)

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

Она не даст правильных результатов, если ваш корневой путь, который не переименовывается, также имеет _TEMPLATE_ в имени.

Я переключаю отложенное расширение в цикле, чтобы защитить от искажения ! в именах путей во время расширения переменной FOR.Если вы знаете, что имена папок не содержат !, вы можете использовать SETLOCAL EnableDelayedExpansion вверху и удалить SETLOCAL и ENDLOCAL из цикла.

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