@ECHO OFF setlocal enableDelayedExpansion SET workingPath=c:\temp\ SET filesToRename=list-* SET stringToSearch=март SET stringToReplace=апрель cd %workingPath% ECHO working path set to %workingPath% FOR /f "delims=^T" %%f IN ('dir /B %filesToRename%') DO ( call :myFunc "%%f" ) GOTO End :myFunc SET oldFileName=%1 SET newFileName=!oldFileName:%stringToSearch%=%stringToReplace%! ren %oldFileName% %newFileName% ECHO %oldFileName% renamed to %newFileName% GOTO End :End
В процессе работы выяснилось много удивительных вещей. Например, что внутри цикла FOR почему-то не срабатывает присвоение SET. Или что команды set и dir обладают массой интересных ключей (в частности, первая при помощи ключа /A умеет вычислять арифметические выражения, а вторая при указании /B возвращает чистые имена файлов без путей). Или что переход по метке может принимать параметр.
В общем, есть, над чем подумать.