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

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

Ответить
Настройки темы
CMD/BAT - [решено] Пакетное переименование файлов (синхронизирование имён одного расширения с другим)

Пользователь


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

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


Изменения
Автор: 19w85
Дата: 03-03-2011
Имеется произвольный список файлов *.mkv
А также список допустим *.ac3

абв 1.mkv
абц2.mkv
...

test 1.ac3
test 34.ac3
...

Требуется 1-ый найденный ac3 переименовать, взяв имя из 1-ого найденного mkv, порядок сортировки обычный, соотвественно, должно стать:
test 1.ac3 ->абв 1.ac3
test 34.ac3->абц2.ac3

Дальше извлечения из mkv-файлов списка имен без расширения в txt-файл уйти мне не удалось:
Код: Выделить весь код
For %%I In ("*.mkv") Do (echo %%~nI>>nameslist.txt)
Цикл, который пробежится по всем строчкам nameslist.txt я сделать могу
Цикл, который переименует каждый файл *.ac3 в какое-то конкретное имя, например, со счетчиком я тоже могу.
А не могу я совместить эти 2 цикла, чтобы для 1ого файла ac3 сопоставить 1ую строчку из nameslist.txt, для 2ого - 2ую строчку и т.д.

Вот тут (http://forum.oszone.net/thread-184481.html) похожая задача решалась, но более простая, т.к. исходное имя переименовываемого файла там конкретное, а не призвольное-полностью неизвестное как в моём случае.

Отправлено: 21:50, 03-03-2011

 

Старожил


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

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


Цитата 19w85:
А не могли бы рассказать принцип действия? »
Принцип действия простой - создается массив команд REN. Ну а они переименовывают.
Теперь то, что у Вас выделено красным:
^ren - символ ^ ставится, чтобы cmd не принял это за команду, а просто как текст.
"%%a" "^>!n!"/" - ну первая часть - просто путь файла с расширением ac3, вторая - идентификатор для будущих действий. Примерно так это выглядит в виде текста:
ren "a.ac3" ">1"/. После второго прохода цикла - ren "a.ac3" ">1"/ren "b.ac3" ">2"/ ну и т.д.
%%arr:^>!n2!=%%~ni.ac3%% - замена счетчика на имя файла с расширением mkv. Где-то так: %%arr:>1=имяMKVфайла.ac3%%
:/=^& - замена символа / на &.
2>nul (%arr:~,-1%) - ну а это, собственно само переименование. 2>nul - не выводить сообщения об ошибках. %arr:~,-1% - массив получившихся команд REN. Без последнего символа. Выглядит примерно так:
ren "a.ac3" "имя1.ac3"&ren "b.ac3" "имя2.ac3"&ren "c.ac3" "имя3.ac3"
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:35, 09-03-2011 | #11



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

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


Аватара для El Sanchez

Ветеран


Contributor


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

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


19w85, ересь №2 , только покороче:
Код: Выделить весь код
@Echo Off
Set Source=C:\Source

SetLocal
For /F "Tokens=1* Delims=:" %%A In ('Dir /B /A-D "%Source%\*.ac3"^|FindStr /N .') Do Set FN%%A=%%B
For /F "Tokens=1* Delims=:" %%A In ('Dir /B /A-D "%Source%\*.mkv"^|FindStr /N .') Do If Defined FN%%A Call Ren "%Source%\%%FN%%A%%" "%%~nB.ac3"
EndLocal
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:32, 09-03-2011 | #12


Пользователь


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

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


El Sanchez,
Покороче - это отлично, спасибо! По этому коду даже вопросов нет, всё проще и понятнее. (я как раз в своих попытках и пытался реализовать именно такой способ через 'Set FN%%A=%%B' только ошибок много наделал, теперь смог увидеть, где именно, ещё раз спасибо)

Отправлено: 23:21, 09-03-2011 | #13


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


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

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


Цитата:
Имеется произвольный список файлов
Специально для подобных целей написал батник для пакетного переименования файлов по списку:
http://it.dnepro.org/2013/120.html

Последний раз редактировалось dionus, 04-10-2013 в 22:21.


Отправлено: 22:02, 04-10-2013 | #14



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Подключение сетевого диска под другим именем khs Microsoft Windows 2000/XP 6 03-10-2019 12:53
CMD/BAT - [решено] Пакетное переименование файлов ArsenBespalov Скриптовые языки администрирования Windows 9 11-08-2016 03:56
[решено] Пакетное переименование ярлыков SimSim Хочу все знать 9 24-10-2012 10:44
CMD/BAT - [решено] Пакетное переименование с использованием алфавитного счётчика kotik147 Скриптовые языки администрирования Windows 6 13-05-2010 00:03
Возвращение ПК в домен под другим именем El Scorpio Microsoft Windows NT/2000/2003 2 06-08-2008 09:45




 
Переход