Это, вероятно, очень простая, уже решенная задача, но:

У меня есть ряд папок, содержащих электронные книги в различных форматах. У них есть формат имени папки:

\Lastname, Firstname (n books)\

Я хочу переименовать каждую из папок, чтобы быть просто

\Firstname Lastname\

я думаю, что это можно сделать с помощью командного файла довольно легко, но прошло много времени с тех пор, как мне пришлось выполнять разбор строк, поэтому я не помню, как.

Помогите? Я использую Windows 7.

1 ответ1

3

Предполагая, что пробелы соответствуют вашему примеру (т. Е. В имени и фамилии нет пробелов), это должно работать.

@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 , чтобы убедиться, что он работает как положено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .