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

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

Ответить
Настройки темы
CMD/BAT - [решено] Помощь с написанием Bat. Переименование файлов в папке с условием.

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


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

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


Приветствую вас, гуру сообщество)
Прошу помощи в написании пакетного файла, если таковой возможно написать.

условия задачи следующие:
есть две сетевые папки "А" и "B"
в папку "A" кладут n-ое кол-во файлов с расширением .mp3 в папке "B" лежит n-ое кол-во файлов с расширением .mp4
задача:
по запуску пакетного файла смотреть на имена .mp3 файлов в папке "A" и переименовать файлы .mp4 в папке "B" в соответствии с именами в "A", не трогая при этом расширение.


Пример: положили в папку "А" - 3 файла с именами 1.mp3, 2.mp3, 3.mp3.
в папке "B" лежат файлы 10.mp4, 12.mp4, 16.mp4, 20.mp4, 25.mp4
Запускаем пакетный файл и получаем в папке "B" файлы с именами 1.mp4, 2.mp4, 3.mp4, 20.mp4, 25.mp4
Содержимое файлов mp4. абсолютно одинаковое, поэтому не важно в какой последовательности они будут переименованы.
В папку "A" могут положить больше файлов чем есть в папке "B", в таком случае переименование идет пока не закончатся файлы в папке "B".

Отправлено: 18:53, 12-03-2019

 

Ветеран


Contributor


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

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


R.i.m.s.k.y.,
Код: Выделить весь код
@Echo Off
	Set "In=Z:\Soft_In"
	Set  InE=".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav"
	Set OutE=" C.wav" " L.wav" " R.wav" " Ls.wav" " Rs.wav"

	Set /A N=1000
	FOR %%f IN (%InE%) DO Set /A N+=1 &Call Set "In@%%N%%=%%~f"
	
	Set /A NN=%N%
	Set /A N=1000
	FOR %%f IN (%OutE%) DO Set /A N+=1 &Call Set "Out@%%N%%=%%~f"

	For /L %%i In (1001,1,%NN%) DO Call :MyRen "%In%" "%%In@%%i%%"  "%%Out@%%i%%"
GoTo :Eof

:MyRen
	FOR %%f IN ("%~1\*%~2") DO (
		Set "Rep=%%~nxf~~"
		 >nul Call Move /Y "%%f" "%~1\%%Rep:%~2~~=%~3%%"
	)
GoTo :Eof
Нарисуйте свой путь вместо моего Set "In=Z:\Soft_In"

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

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

Отправлено: 16:46, 14-03-2019 | #11



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

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


Аватара для R.i.m.s.k.y.

Ветеран


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

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


megaloman,
1 можно пояснить как оно работает, set еще понятно, но в циклах In@%%N%%=%%~f и подобное это просто brainfuck какой-то
2 а можно натравить на папку, т.е. Set "In=Z:\Soft_In" передать через контекстное меню имя папки (т.е. eac3to демуксит все дорожки в папку, я этот батник кладу в sendto, потом на папке с вавками делаю ПКМ-отправить-этотбатник). Просто при массовой обработке и перекодировании (особенно сериалов) на каждый эпизод своя папка, эпизодов 12, сезонов 3-5 и получается 36-60 раз надо править Set "In=Z:\Soft_In"

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 14-03-2019 в 16:59.


Отправлено: 16:53, 14-03-2019 | #12


Ветеран


Contributor


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

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


Натравить на папку не умею, а папку на батник - пожалуйста
Код: Выделить весь код
@Echo Off
	If "%~1"=="" (
		Echo "%~dpnx0" sterted without argument &Echo.
		Pause
		Exit /B 2
	)
	Set "In=%~1" 
	If "%In:~-1%"=="\" Set "In=%In:~0,-1%"

	Set  InE=".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav"
	Set OutE=" C.wav" " L.wav" " R.wav" " Ls.wav" " Rs.wav"

	Set /A N=1000
	FOR %%f IN (%InE%) DO Set /A N+=1 &Call Set "In@%%N%%=%%~f"
	
	Set /A NN=%N%
	Set /A N=1000
	FOR %%f IN (%OutE%) DO Set /A N+=1 &Call Set "Out@%%N%%=%%~f"

	For /L %%i In (1001,1,%NN%) DO Call :MyRen "%In%" "%%In@%%i%%"  "%%Out@%%i%%"
GoTo :Eof

:MyRen
	FOR %%f IN ("%~1\*%~2") DO (
		Set "Rep=%%~nxf~~"
		 >nul Call Move /Y "%%f" "%~1\%%Rep:%~2~~=%~3%%"
	)
GoTo :Eof
Сделайте, например, на рабочем столе значок на батник, и таскайте на него нужную папку в проводнике.
Как это работает

В цикл помещен список для замены ".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav"
В цикле элементы списка присваиваются переменным In@10001, In@10002, In@10003 ...
Код: Выделить весь код
	Set /A N=1000
	FOR %%f IN (%InE%) DO Set /A N+=1 &Call Set "In@%%N%%=%%~f"
Аналогично Out@10001, Out@10002, Out@10003 ...
В NN сохраняем максимальный номер, чтобы потом в цикле перебрать все переменные:
что заменяем - на что заменяем
при вызове функции переименования

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

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

Отправлено: 17:24, 14-03-2019 | #13


Ветеран


Contributor


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

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


R.i.m.s.k.y.,
Цитата R.i.m.s.k.y.:
Просто при массовой обработке и перекодировании (особенно сериалов) на каждый эпизод своя папка, эпизодов 12, сезонов 3-5 и получается 36-60 раз надо править »
Подозреваю, есть папка, допустим, СЕРИАЛ. В ней куча папок СЕЗОНЫ, в них еще куча Эпизодов.
Вот вариант, тянИте папку СЕРИАЛ на батник, и не надо 60 раз напрягать усталость.
Обработаются все папки

Код: Выделить весь код
@Echo Off
	If "%~1"=="" (
		Echo "%~dpnx0" sterted without argument &Echo.
		Pause
		Exit /B 2
	)
	Set "In=%~1" 
	If "%In:~-1%"=="\" Set "In=%In:~0,-1%"

	Set  InE=".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav" ".LFE.wav"
	Set OutE=" C.wav" " L.wav" " R.wav" " Ls.wav" " Rs.wav" " LFE.wav"

	Set /A N=1000
	FOR %%f IN (%InE%) DO Set /A N+=1 &Call Set "In@%%N%%=%%~f"
	
	Set /A NN=%N%
	Set /A N=1000
	FOR %%f IN (%OutE%) DO Set /A N+=1 &Call Set "Out@%%N%%=%%~f"

	For /L %%i In (1001,1,%NN%) DO Call :MyRen "%In%" "%%In@%%i%%"  "%%Out@%%i%%"
GoTo :Eof

:MyRen
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%~1\*%~2" /b /s /A:-D`) DO (
		Set "Rep=%%~nxf~~"
		>nul Call Move /Y "%%f" "%%~dpf%%Rep:%~2~~=%~3%%"
	)
GoTo :Eof

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


Последний раз редактировалось megaloman, 15-03-2019 в 11:37.

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

Отправлено: 18:08, 14-03-2019 | #14


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


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

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


Цитата megaloman:
dedylka, Попробуйте. Пути пропишИте свои без \ на конце »

работает, спасибо!

Отправлено: 18:10, 14-03-2019 | #15


Ветеран


Contributor


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

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


Цитата dedylka:
он переименовывает первый файл, а дальше видимо копирует его столько раз сколько файлов в папке A и называет нужными именами, при этом остальные файлы в папке B, которые не были переименованы просто оставляет. »
Вы, видимо, не читали описание, которое я оставил. Скрипт берёт первый же найденный файл mp4 и копирует его в файлы, одноимённые с mp3.

Отправлено: 20:04, 14-03-2019 | #16


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата megaloman:
Подозреваю, есть папка, допустим, СЕРИАЛ. В ней куча папок СЕЗОНЫ, в них еще куча Эпизодов. »
верно
\сериал\сезон\эпизод\номер дорожки\*.wav

Цитата megaloman:
Вот вариант, тянИте папку СЕРИАЛ на батник, и не надо 60 раз напрягать усталость.
Обработаются все папки »
барзо дзинкуе!
батник кинул в sendto папку, по папке ПКМ - отправить на этот батник - отработало! только .LFE не переименовалось
дописал LFE
Код: Выделить весь код
Set  InE=".LFE.wav" ".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav"
	Set OutE=" LFE.wav" " C.wav" " L.wav" " R.wav" " Ls.wav" " Rs.wav"
работает!
можно я этот скрипт запощу на рутракер в тему по обработке звука?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 09:59, 15-03-2019 | #17


Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
можно я этот скрипт запощу на рутракер в тему по обработке звука? »
Разумеется, можете. Авторство ежели подменять — вот это плохо, а способствовать распространению знаний — почему нет?! Можете там и ссылку на Ваше первое сообщение по данному вопросу в этой теме приложить.

Отправлено: 10:23, 15-03-2019 | #18


Аватара для R.i.m.s.k.y.

Ветеран


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

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


megaloman, подправьте, пожалуйста, батник
Код: Выделить весь код
Set  InE=".LFE.wav" ".C.wav" ".L.wav" ".R.wav" ".SL.wav" ".SR.wav"
	Set OutE=" LFE.wav" " C.wav" " L.wav" " R.wav" " Ls.wav" " Rs.wav"
я дам ссылку на сообщение

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 10:34, 15-03-2019 | #19


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Цитата megaloman:
Что не так? »
я ошибся в начале и забыл указать еще .LFE, я указал 5 файлов с концовками .C .L .R .SL .SR, и нужно было еще указать шестой файл с концовкой .LFE
Если давать ссылку на решение то оно должно быть полным
Извините за мою невнимательность и спасибо Вам за решение!

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 10:43, 15-03-2019 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Помощь с написанием Bat. Перемещение и удаление файлов и папок старше N дней. Stanley5 Скриптовые языки администрирования Windows 20 06-03-2019 05:39
CMD/BAT - [решено] Переименование с условием bat alado Скриптовые языки администрирования Windows 8 14-07-2017 19:27
CMD/BAT - Архивирование, переименование и перемещение файлов с помощью BAT-файла kirillius Скриптовые языки администрирования Windows 7 13-05-2016 12:57
CMD/BAT - Переименование файлов в папке по имени папки_счётчик Sergo_zloy Скриптовые языки администрирования Windows 13 17-01-2014 16:58
CMD/BAT - Переименование группы файлов, используя команды bat SergMarkow Скриптовые языки администрирования Windows 0 20-01-2013 23:23




 
Переход