Você pode tentar algo assim (executá-lo em qualquer diretório que contenha os arquivos):
@echo off
setlocal
FOR /F "delims=" %%A IN ('dir /s /b /a:-d *.*') DO (
CALL :swap "%%A"
)
GOTO :EOF
:swap
set fileDir=%~dp1
set filename=%~n1
set ext=%~x1
set firstPart=%filename:~0,19%
set secondPart=%filename:~20%
move "%~f1" "%fileDir%%secondPart%-%firstPart%%ext%"
GOTO :EOF
Notas:
- Ele renomeia qualquer coisa no diretório atual ou em qualquer subdiretório.
- Você provavelmente desejará modificar o comando dir para ser mais específico sobre quais arquivos renomear.
- Provavelmente, verifique novamente os desvios. Com base no seu exemplo, o primeiro bit parece ter 19 caracteres. Eu também estou supondo que você quer manter o traço entre as duas partes.
- Realmente, seria provavelmente uma boa ideia fazer um eco na frente do comando move e executá-lo dessa forma, apenas para garantir que os resultados sejam o que você espera.
Eu tentei isso com uma carga de trabalho bem simples, e parecia funcionar, mas YMMV.