Не проверено, но я думаю, что это будет работать
@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 из цикла.