Пакетное переименование файлов (синхронизирование имён одного расширения с другим)
Имеется произвольный список файлов *.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) Цикл, который переименует каждый файл *.ac3 в какое-то конкретное имя, например, со счетчиком я тоже могу. А не могу я совместить эти 2 цикла, чтобы для 1ого файла ac3 сопоставить 1ую строчку из nameslist.txt, для 2ого - 2ую строчку и т.д. Вот тут (http://forum.oszone.net/thread-184481.html) похожая задача решалась, но более простая, т.к. исходное имя переименовываемого файла там конкретное, а не призвольное-полностью неизвестное как в моём случае. |
Количество файлов *.mkv и *.ac3 одинаковое?
Они все лежат в одной папке? |
Цитата:
|
Цитата:
|
Цитата:
1-ой вариант (с условными именами): a.mkv, b.mkv, c.mkv 1.ac3, 2.ac3 3-его ac3-файла нету, переименовывать нечего - как тут по другому можно поступить, кроме пропуска? 2-ой вариант: a.mkv, b.mkv 1.ac3, 2.ac3, 3.ac3 Имя для переименования 3его ac3-файла взять неоткуда, т.к. нет mkv - также кроме как пропустить тут делать ведь нечего... |
Цитата:
|
Цитата:
|
Вроде бы поставленная задача средней сложности...неужели никто ничего не подскажет?
|
Видно после праздника голова не работает. Получилась такая ересь. :)
Но самое смешное - у меня работает. Если у Вас не будет - не удивлюсь. Код:
@echo off |
SendMessage,
Отлично, спасибо! У меня вроде тоже работает (естественно, в начало командника добавил cd /D "%~dp0" и удалил из кода z:\sandbox\003\ чтобы полностью соответствовало поставленной задаче) А не могли бы рассказать принцип действия? И особенно прокомментировать, что именно происходит в выделенных частях в этих строках: Код:
set "arr=!arr!^ren "%%a" "^>!n!"/" |
Цитата:
Теперь то, что у Вас выделено красным: ^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" |
19w85, ересь №2 :), только покороче:
Код:
@Echo Off |
El Sanchez,
Покороче - это отлично, спасибо! По этому коду даже вопросов нет, всё проще и понятнее. (я как раз в своих попытках и пытался реализовать именно такой способ через 'Set FN%%A=%%B' только ошибок много наделал, теперь смог увидеть, где именно, ещё раз спасибо) :) |
Цитата:
http://it.dnepro.org/2013/120.html |
Время: 20:23. |
Время: 20:23.
© OSzone.net 2001-