Windows RENAME довольно ограничена тем, что она может делать с подстановочными знаками. Это не поможет с вашей текущей проблемой, но вы можете увидеть, что возможно, в разделе Как команда Windows RENAME интерпретирует подстановочные знаки?
Я написал гибридную утилиту JScript/batch REPL.BAT, которая выполняет поиск и замену регулярных выражений в stdin и записывает результат в stdout. Утилита представляет собой чистый нативный скрипт, который работает на любой версии Windows, начиная с XP. Загрузка exe-файла не требуется.
REPL.BAT доступен здесь. Полная документация встроена в скрипт.
Я продолжаю удивляться, насколько полезным может быть REPL.BAT. Это может легко решить вашу текущую проблему.
Если предположить, что REPL.BAT находится в вашем текущем каталоге или, что еще лучше, где-то в вашем PATH, то из командной строки будет работать следующий умеренно сложный один вкладыш:
for /f "tokens=1* delims=?" %A in ('dir /b *TEMPLATE*^|repl "(.*)TEMPLATE(.*)" "$&?$1201307$2" I') do @ren "%A" "%B"
Или как более простой для чтения пакетный скрипт:
@echo off
for /f "tokens=1* delims=?" %%A in (
'dir /b *TEMPLATE*^|repl "(.*)TEMPLATE(.*)" "$&?$1201307$2" I'
) do ren "%%A" "%%B"
Я передаю соответствующие имена файлов в REPL.BAT, чтобы преобразовать каждое имя в исходное имя, а ?
разделитель, а затем новое имя. Я выбрал ?
в качестве разделителя, потому что он не может появляться в имени файла. Команда FOR /F анализирует результаты и выполняет команду REN для каждого файла.
Выше можно легко изменить, чтобы рекурсивно переименовать все соответствующие файлы в иерархии папок:
@echo off
for /f "tokens=1* delims=?" %%A in (
'dir /b /s *TEMPLATE*^|repl ".*\\(.*)TEMPLATE(.*)" "$&?$1201307$2" I'
) do ren "%%A" "%%B"
Наконец, было бы неплохо динамически установить дату, но работа с датой и временем в пакетном режиме, как правило, является непростой задачей из-за различий в локали.
Другая полезная гибридная утилита JScript/batch под названием GETTIMESTAMP.BAT обеспечивает надежные вычисления и форматирование временных меток. Он может создать временную метку практически в любом формате. Можно указать дату / время или узнать по системным часам. Он обеспечивает смещение даты и времени, а также указатели часового пояса как для ввода, так и для вывода.
GETTIMESTAMP.BAT доступен здесь. , Утилита находится внизу поста. Обширная документация встроена в сценарий.
С GETTIMESTAMP.BAT в PATH теперь тривиально расширить приведенный выше код для динамического установления строки даты. Это рекурсивная версия папки:
@echo off
setlocal
call getTimestamp -f {yyyy}{mm} -r dt
for /f "tokens=1* delims=?" %%A in (
'dir /b /s *TEMPLATE*^|repl ".*\\(.*)TEMPLATE(.*)" "$&?$1%dt%$2" I'
) do ren "%%A" "%%B"