Предполагая, что пробелы соответствуют вашему примеру (т. Е. В имени и фамилии нет пробелов), это должно работать.
@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
Он просто разделяется на пробелы и удаляет запятую из Фамилии всех каталогов в том же каталоге, что и пакетный файл.
Если в именах могут быть пробелы, необходима некоторая манипуляция с разделителями. Я пойду возиться с этим.
Редактировать:
Вот так. Игра с разделителями означает, что Имя было окружено пробелом до и после него, который должен был быть обрезан. По сути, он ожидает Lastname
за которой следует ,
а затем
Firstname
с последующим (whatever
. Пробелы вокруг имени важны (и есть в вашем примере). Пробелы в именах работают нормально.
@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
Возможно, вы захотите выполнить тестовый прогон, поместив echo
перед ren
, чтобы убедиться, что он работает как положено.