Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Массовое переименование, отнимая слова от текущего имени

Ответить
Настройки темы
CMD/BAT - [решено] Массовое переименование, отнимая слова от текущего имени

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго всем!

Пожалуйста, подскажите, как сделать переименование файлов по шаблону:
Есть папки с файлами, и в них файлы.
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\
)
Буду очень признателен за подсказку...

Отправлено: 17:31, 18-07-2018

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


ArchyA, упростим задачу:

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

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:36, 18-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 17:37, 18-07-2018 | #3


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:52, 18-07-2018 | #4

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


ArchyA, это хуже.

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

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

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 18-07-2018 в 18:11.


Отправлено: 17:54, 18-07-2018 | #5


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 17:59, 18-07-2018 | #6

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата ArchyA:
Файлов в папке НИКОГДА не будет меньше трёх »
Поскольку "ВСЕ файлы начинаются со слова+имя_текущей_папки- — это уже не принципиально, и задача имеет нормальное решение.

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

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

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 18-07-2018 в 18:48.


Отправлено: 18:42, 18-07-2018 | #7


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Наколхозю
Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 18-07-2018 в 20:11.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:45, 18-07-2018 | #8


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Это оно Идеально, спасибо! В понедельник оттестирую и отпишусь.

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

Последний раз редактировалось ArchyA, 24-07-2018 в 10:42. Причина: протестировал


Отправлено: 18:59, 19-07-2018 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Массовое переименование, отнимая слова от текущего имени

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Батник на переименование от имени администратора. Kondei Скриптовые языки администрирования Windows 7 01-12-2011 06:59
Разное - [решено] Запуск cmd от имени текущего пользователя McLotos Microsoft Windows 2000/XP 3 25-01-2011 11:25
VBS/WSH/JS - Удаленный запуск HTA-приложения от имени текущего пользователя x wanderer Скриптовые языки администрирования Windows 1 15-04-2010 10:39
CMD/BAT - [решено] AD массовое переименование пользователей toperx Скриптовые языки администрирования Windows 9 24-07-2009 12:46
Переименование %homepath% в зависимости от имени учетной записи amped Microsoft Windows 2000/XP 6 26-04-2007 15:47




 
Переход