PDA

Показать полную графическую версию : [решено] Массовое переименование, отнимая слова от текущего имени


ArchyA
18-07-2018, 17:31
Доброго всем!

Пожалуйста, подскажите, как сделать переименование файлов по шаблону:
Есть папки с файлами, и в них файлы.
dirName1

slovo-dirName1-[RandomName].jpg
slovo-dirName1-[RandomName].jpg
slovo-dirName1-[RandomName].jpg

dirName2

slovo-dirName2-[RandomName].jpg
slovo-dirName2-[RandomName].jpg
slovo-dirName2-[RandomName].jpg

Нужно сохранить структуру папок, но из файлов убрать мусор — slovo (оно всегда известно) и dirName*, оставив только [RandomName].jpg
То есть отнять какое-то количество заранее известных слов, разделенных дефисом.
Проблема в том, что просто по дефису делать нельзя — и в слове, и в имени папки, и в нужном имени тоже могут быть дефисы, надо как-то именно отнимать два слова...

Это был результат выполнения скрипта (перемещал, а не переименовывал потому, что в некоторых папках по ren происходило зацикливание и рост длинны имени файлов до бесконечности),
а теперь надо переименовать обратно:
for /d %%d in ("*") do (
cd %%d
for %%f in ("*.jpg") do move /y %%f ..\slovo-%%d-%%f
cd ..
move /y *.jpg .\%%d\
)


Буду очень признателен за подсказку...

mwz
18-07-2018, 17:36
ArchyA, упростим задачу:

Т.е. вам надо отрезать последовательность от начала имени и по второй дефис включительно, типа убрать
slovo-dirName1-
чтобы не заморачиваться тем, что dirname все разные? Или в именах каталогов тоже могут быть дефисы?

ArchyA
18-07-2018, 17:37
Дефисы могут быть внутри и слова, и папки, и имени... поэтому и пишу )
Например, slo-vo-dir-super-name-nujnoe-imya-faila.jpg,
при этом slo-vo и dir-super-name будут известны.

И кол-во дефисов везде произвольное :(:(:(

ArchyA
18-07-2018, 17:52
Точнее так, в слове дефисов нет нигде и оно везде одинаковое.
А в каждой папке и в каждом имени могут быть или не быть 1-3 дефиса.
И внутри каждой папки слово и второе слово, имя папки, всегда фиксированное для всех файлов в этой папке

mwz
18-07-2018, 17:54
ArchyA, это хуже.

Тогда вопрос: файлы сейчас разложены по папкам тем же, что и dirName, входящее в состав имён и которое надо отрезать?
Если нет — ещё хуже. Особенно если файл в папке один.

PS
Чисто на будущее: применяйте в таких случаях сочетания, которые могут встретиться в именах лишь с очень малой вероятностью. Например, #####slovo-dirName1-###### и даже slovo-dirName1-######- вместо slovo-dirName1- вообще никаких затруднений не вызвало бы.

ArchyA
18-07-2018, 17:59
Файлов в папке НИКОГДА не будет меньше трёх.
Да, ВСЕ файлы начинаются со слова+имя_текущей_папки.

вот живой пример:

E:\screens\elk\birthday
..
symbol-birthday-birthday.jpg
symbol-birthday-blue.jpg
symbol-birthday-green.jpg
symbol-birthday-martini.jpg
symbol-birthday-red.jpg
symbol-birthday-rose.jpg

mwz
18-07-2018, 18:42
Файлов в папке НИКОГДА не будет меньше трёх »

Поскольку "ВСЕ файлы начинаются со слова+имя_текущей_папки- — это уже не принципиально, и задача имеет нормальное решение.

Теперь ясно всё — но я уж колхозить не буду: тут спецы должны предложить гораздо более изящное решение, чем наваял бы я. :sorry:

Ну а вариант — вычислять в каждой папке количество символов в последовательности slovo-имя_папки- и переименовывать все файлы этой папки, используя их текущее имя начиная с символа, следующего за вычисленным значением. И затем переходить к следующей папке

megaloman
18-07-2018, 19:45
Наколхозю@Echo Off

Set "BoxIn=Z:\Жил-был у бабушки"
Set "Mask=В начале было слово*.jpg"

For /f "usebackq delims=" %%i in (`2^>nul dir /b /s /a:-d "%BoxIn%\%Mask%"`) Do Set "Fpath=%%~dpi" &Call :OverRen "%%i" "%%Fpath:~0,-1%%"
GoTo :Eof

:OverRen
Set "NewName=%~nx1"
Call Set "NewName=%%NewName:*%~nx2-=%%"

echo Ren %1 "%NewName%"
GoTo :EofДля боевой работы уберите echo перед Ren
До переименования

Z:\Жил-был у бабушки\В начале было слово-Жил-был у бабушки-серенький волк.jpg
Z:\Жил-был у бабушки\В начале было слово-Жил-был у бабушки-страшный козел.jpg
Z:\Жил-был у бабушки\В начале было слово-Жил-был у бабушки-три-весёлых-гуся.jpg
Z:\Жил-был у бабушки\Бабушка козлика\В начале было слово-Бабушка козлика-серенький волк.jpg
Z:\Жил-был у бабушки\Бабушка козлика\В начале было слово-Бабушка козлика-страшный козел.jpg
Z:\Жил-был у бабушки\Бабушка козлика\В начале было слово-Бабушка козлика-три-весёлых-гуся.jpg
Z:\Жил-был у бабушки\Бабушка козлика\Очень любила\В начале было слово-Очень любила-серенький волк.jpg
Z:\Жил-был у бабушки\Бабушка козлика\Очень любила\В начале было слово-Очень любила-страшный козел.jpg
Z:\Жил-был у бабушки\Бабушка козлика\Очень любила\В начале было слово-Очень любила-три-весёлых-гуся.jpg
Z:\Жил-был у бабушки\Серенький козлик\В начале было слово-Серенький козлик-серенький волк.jpg
Z:\Жил-был у бабушки\Серенький козлик\В начале было слово-Серенький козлик-страшный козел.jpg
Z:\Жил-был у бабушки\Серенький козлик\В начале было слово-Серенький козлик-три-весёлых-гуся.jpg

После переименования

Z:\Жил-был у бабушки\серенький волк.jpg
Z:\Жил-был у бабушки\страшный козел.jpg
Z:\Жил-был у бабушки\три-весёлых-гуся.jpg
Z:\Жил-был у бабушки\Бабушка козлика\серенький волк.jpg
Z:\Жил-был у бабушки\Бабушка козлика\страшный козел.jpg
Z:\Жил-был у бабушки\Бабушка козлика\три-весёлых-гуся.jpg
Z:\Жил-был у бабушки\Бабушка козлика\Очень любила\серенький волк.jpg
Z:\Жил-был у бабушки\Бабушка козлика\Очень любила\страшный козел.jpg
Z:\Жил-был у бабушки\Бабушка козлика\Очень любила\три-весёлых-гуся.jpg
Z:\Жил-был у бабушки\Серенький козлик\серенький волк.jpg
Z:\Жил-был у бабушки\Серенький козлик\страшный козел.jpg
Z:\Жил-был у бабушки\Серенький козлик\три-весёлых-гуся.jpg

ArchyA
19-07-2018, 18:59
Это оно :) Идеально, спасибо! В понедельник оттестирую и отпишусь.

Работает великолепно, именно то, что нужно, спасибо огромное! )




© OSzone.net 2001-2012