2012-03-06 4 views
2

Я прочитал сообщение this и не могу удовлетворить мои требования.Рекурсивно переименовать файлы и папки

Моя структура Папка:

_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

Возможный дубликат: http://stackoverflow.com/questions/717171/recursive-renaming-file-names-folder-names-with-a-batch-file – Dirk

+0

@Dirk thanks .. :) the post help me при переименовании файлов, но он не переименовывал папки .. в любом случае половина выполненной работы .. как рекурсивно переименовать подпапки? –

+0

Чтобы переименовать папки, вам придется использовать дополнительный цикл, но с 'for/r/d'. – MBu

ответ

4

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

@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.

+0

Работает :) –

Смежные вопросы