Том, возится с предыдущим сценарием, который я разместил, вот один обрабатывает все файлы и подкаталоги:
recurename.cmd каталог
@echo off
setlocal ENABLEDELAYEDEXPANSION
set Replaces="V=Y" "W=Z" "m=A"
set StartDir=%~dp1
call :RenameDirs "%StartDir:~0,-1%"
exit /b 0
:RenameDirs
call :RenameFiles "%~1"
for /f "delims=" %%d in ('dir /ad /b "%~1"2^>nul') do call :RenameDirs "%~1\%%~d"
if "%~1"=="%StartDir:~0,-1%" exit /b 0
set _pos=0
set _dir=%~f1
set _dir_orig=!_dir!
:finddirName
set /a _pos-=1
call set _dir_pos=!!!_dir:~%_pos%,1!!!
if not "%_dir_pos%"=="\" goto finddirName
call set _origines=!!!_dir:~0,%_pos%!!!
set /a _pos+=1
call set _dir=!!!_dir:~%_pos%!!!
for %%r in (%Replaces%) do call set _dir=!!!_dir:%%~r!!!
if /i not "!_dir!"=="!_dir_orig!" echo move "%~1" "%_origines%\!_dir!"
exit /b 0
:RenameFiles
for /f "delims=" %%f in ('dir /a-d /b "%~1"2^>nul') do (
set _file=%%~nf
set _file_orig=!_file!
for %%r in (%Replaces%) do call set _file=!!!_file:%%~r!!!
if /i not "!_file!"=="!_file_orig!" echo ren "%~1\%%f" "%~1\!_file!%%~xf"
)
exit /b 0
___ Примечание ____
Это неразрушающий скрипт, удалите echo из правильных команд, чтобы переименовать любой файл / каталог. ( эхо-ход и эхо-рен )
Set Replaces =: Установите эту переменную для любых пар, которые вам нужно изменить.
set Startdir =: Я хотел как-то защитить аргумент и взять из него только путь. Если в качестве параметра указан файл, будет обработан весь каталог контейнера и его подкаталоги.
if "% ~ 1" == "% StartDir: ~ 0, -1%" exit / b 0: Эта строка была помещена, чтобы остановить обработку самого каталога аргументов. Если вы хотите, удалите эту строку.
Если скрипт вызывается, скажем, с помощью c: \ temp \ , удаление этой строки изменит имя на c: \ teAp \ в конце.