Supondo que os espaços sejam consistentes com o seu exemplo (ou seja, o nome e o sobrenome não têm espaços), isso deve funcionar.
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=1,2,*" %%a in ('dir /a:d /b') do (
set lastname=%%a
set lastname=!lastname:~0,-1!
ren "%%a %%b %%c" "%%b !lastname!"
)
endlocal
Ele apenas divide por espaços e apara a vírgula do Sobrenome, de todos os diretórios no mesmo diretório que o arquivo em lotes.
Se os nomes podem ter espaços, alguma manipulação do delimitador é necessária. Eu vou mexer com isso.
Editar:
Aqui vamos nós. Lidar com delimitadores significa que o nome estava cercado por um espaço antes e depois dele, que precisava ser aparado. Então, basicamente, ele espera um Lastname
seguido por um ,
seguido por um
Firstname
seguido por um
(whatever
. Os espaços ao redor do Firstname são importantes (e estão no seu exemplo). Espaços dentro dos nomes funcionam bem.
@echo off
setlocal EnableDelayedExpansion
for /f "tokens=1,2,* delims=,(" %%a in ('dir /a:d /b') do (
set firstname=%%b
set firstname=!firstname:~1,-1!
ren "%%a,%%b(%%c" "!firstname! %%a"
)
endlocal
Você pode querer ter um teste, colocando um echo
antes do ren
, para garantir que ele funcione como esperado.