Показать полную графическую версию : [решено] Массовое переименование, отнимая слова от текущего имени
Доброго всем!
Пожалуйста, подскажите, как сделать переименование файлов по шаблону:
Есть папки с файлами, и в них файлы.
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\
)
Буду очень признателен за подсказку...
ArchyA, упростим задачу:
Т.е. вам надо отрезать последовательность от начала имени и по второй дефис включительно, типа убрать
slovo-dirName1-
чтобы не заморачиваться тем, что dirname все разные? Или в именах каталогов тоже могут быть дефисы?
Дефисы могут быть внутри и слова, и папки, и имени... поэтому и пишу )
Например, slo-vo-dir-super-name-nujnoe-imya-faila.jpg,
при этом slo-vo и dir-super-name будут известны.
И кол-во дефисов везде произвольное :(:(:(
Точнее так, в слове дефисов нет нигде и оно везде одинаковое.
А в каждой папке и в каждом имени могут быть или не быть 1-3 дефиса.
И внутри каждой папки слово и второе слово, имя папки, всегда фиксированное для всех файлов в этой папке
ArchyA, это хуже.
Тогда вопрос: файлы сейчас разложены по папкам тем же, что и dirName, входящее в состав имён и которое надо отрезать?
Если нет — ещё хуже. Особенно если файл в папке один.
PS
Чисто на будущее: применяйте в таких случаях сочетания, которые могут встретиться в именах лишь с очень малой вероятностью. Например, #####slovo-dirName1-###### и даже slovo-dirName1-######- вместо slovo-dirName1- вообще никаких затруднений не вызвало бы.
Файлов в папке НИКОГДА не будет меньше трёх.
Да, ВСЕ файлы начинаются со слова+имя_текущей_папки.
вот живой пример:
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
Файлов в папке НИКОГДА не будет меньше трёх »
Поскольку "ВСЕ файлы начинаются со слова+имя_текущей_папки- — это уже не принципиально, и задача имеет нормальное решение.
Теперь ясно всё — но я уж колхозить не буду: тут спецы должны предложить гораздо более изящное решение, чем наваял бы я. :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
Это оно :) Идеально, спасибо! В понедельник оттестирую и отпишусь.
Работает великолепно, именно то, что нужно, спасибо огромное! )
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.