![]() |
Как дописать случайные числа к началам имён файлов в каталоге
Знаю что задача простенькая -- но давно не занимался такого класса задачками...
Приписать случайные (достаточно трёх-пяти разрядов) числа и разделитель к началу имён всех файлов каталога (подкаталоги не интересуют), т.е. вместо, например, ... ofigennaya_pesnya.mp3 prosto_obaldenno.mp3 ... получить типа: ... 32761_prosto_obaldenno.mp3 ... 56845_ofigennaya_pesnya.mp3 ... (желательно с одинаковым числом цифр, т.е., например, не 53, а 00053 при пятиразрядных, или 053 при трёхразрядных). Названия, приведённые для примера, подсмотрены на одном из чужих компов. :) |
Как-то так:
Код:
@echo off |
mwz, а в чем тайный смысл случайных префиксов? Ведь тогда еще и придется проверять, не оказались ли случайные неслучайными :) Инкрементные проще, короче и надежнее.
Код:
$global:i=12345 |
Iska, отлично, спасибо!
Маленькая погрешность: не переименовались файлы, имена которых содержат восклицательный знак. Vadikan, собственно, конкретную задачу можно понять из примеров: [достаточно] случайным образом пересортировать порядок следования файлов с неслучайными именами. :) |
Цитата:
Без проверки на уникальность: Код:
dir c:\test\ -Filter *.mp3 | Rename-Item -NewName { "$(Get-Random -min 10000 -max 99999)-$($_.Name)"; } |
Цитата:
Приведённый ранее код можно заменить, например, таким, используя двойное раскрытие переменных окружения по «call»: Код:
@echo off Цитата:
Если для воспроизведения — так ведь практически все известные мне плееры имеют функцию «перемешивания» файлов в списке. Можно даже просто составить список .m3u из исходных файлов в произвольном порядке и «скормить» его плееру. |
Vadikan, попробовал cmd-файл (Windows-7); увы:
"Rename-Item" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. (глубже пока не полез). Цитата:
Да, задача чисто утилитарная: перемешивание музыкальных файлов, которые затем кидаются на флэшку формата FAT32 (плеер в автомобиле воспроизводит их в натуральном порядке, т.е. в порядке следования их в таблице FAT) и могут быть затем переименованы назад (почему и желательно было одинаковое число цифр: для автоматизации) с сохранением случайности порядка в таблице FAT. .m3u -- у плеера с ними какие-то проблемы (похоже что в случае, если файл, стоящий на очереди, удалён с флэшки: после этого идёт сообщение типа "Неверный формат" и флэшку приходится перезаливать, поскольку перестаёт играть её вообще). Опять же список надо всё равно сортировать, что и отметил Vadikan. Случайный порядок воспроизведение -- да, есть; но у алгоритма конкретного плеера оказались "свои музыкальные предпочтения": даже при количестве файлов порядка тысячи (5 знаков в исходном вопросе я взял с запасом, зная что на сложность решения это не должно повлиять) некоторые композиции он может прокрутить по пять раз в час, а некоторые -- раз в пару месяцев. Промежуточный выход был найден: предварительная сортировка по размеру и скидывание в этом порядке (файлы, подготовленные к записи на флэшку, лежат жёсткими ссылками в отдельном каталоге и потихоньку пополняются, файлы же, удалённые с флэшки, переносятся отсюда в другую папку чтобы не зацепить их снова; установленная утилита LinkShellExtention зрительно проявляет жёсткие ссылки в основном каталоге и сразу видно, что файл или уже лежит в папке с подготовленными, или что заведомо не должен там лежать). Но некоторые длинные одинаковые композиции в разных вариациях оказались достаточно близки друг к другу. А тут как раз надо перезалить флэшку -- и я рискнул задать вопрос, зная что каких-то трудностей он не должен вызвать (правда, думал что будет использован цикл for и переменная %random% -- то направление, которое я собирался попробовать, не сообразив что можно использовать dir с передачей результата на дальнейшую обработку, как в последнем скрипте у Vadikan; извинения за уточнение с восклицательными знаками: понятно что в данном случае это некритично, и пяток-десяток файлов можно и вручную потасовать). |
mwz, это PowerShell, другую консоль надо открыть или так. Спасибо за развернутое описание задачи :)
|
mwz, спасибо, теперь ясно. Разве что — я бы не переименовывал оригинальные файлы, а копировал результирующие файлы под новым именем в отдельный каталог.
|
Цитата:
А так и места не занимают (хардлинки ж, а их и переименовать без влияния на двойников в основном каталоге можно как угодно, и если изменять, типа добавления или правки тэгов в основном каталоге (и наоборот: в каталоге подготовленном для заливки) -- сразу и в хардлинках это будет отражено; при условии, разумеется, что не происходит удаления исходного файла с записью откорректированного на его место -- но в этом случае сразу пропадает метка жёсткой связи), и видно что где. Цитата:
PS Vadikan, Да, скрипт PowerShell я выполнил, запустив его окно и вставив команду (с учётом имени каталога). :) Результат тоже хороший -- и тоже споткнулось на некоторых символах (на квадратной скобке, насколько понимаю); разделителем же стал не знак подчёркивания, а дефис, хотя в команде вижу именно знак подчёркивания. Ошибки обработки -- такие: |
mwz, а трюки те же - скопировал код, открыл консоль, нажал ПКМ. И настраивать ничего не надо.
|
Цитата:
Цитата:
|
Цитата:
А этот трюк я уже проделал, и даже отчёт приложил к предыдущему сообщению. :) Цитата:
Ну а оставшиеся + новые при следующей заливке будут пересортированы уже в другом порядке (что бывает психологически заметно, правда, при относительно малом количестве записей, когда уже знаешь, за какой песней пойдёт какая: такой пересортировкой вносится элемент неожиданности :) ). |
Цитата:
Цитата:
Код в сообщении 5 корректно переименовал файлы Dope Smugglaz - The World [pmt rmx].mp3 Caetano Veloso - Cafe Copacabana [C&B] - Garota de Ipanema.mp3 Цитата:
|
Цитата:
С дефисом -- действительно непринципиально; и означает, что я не разобрался в конструкции -$($_.Name). :( Цитата:
Однако полученные утилитарные результаты как с CMD, так и с PowerShell меня вполне устраивают -- так что это чисто для сведения. PS Ну вот, заставили пойти на площадку для выгула и для начала пробежаться по лужайке... тьфу.. по "Курсу выживания при создании сценариев" для PS. :) Теперь понял, почему я решил что должен вводиться знак подчёркивания, а вводится дефис -- а из беглого чтения смог вынести предположение, что как раз в этой конструкции знак подчёркивания вместо дефиса должен отработать. И действительно сработало. Заодно поменял слово "скрипты" в реплике выше на "сценарии". Спасибо. :) PPS Vadikan, Опять же -- информация чисто для сведения, мою задачу вы мне уже решили с достаточной степенью точности. :) |
Время: 11:29. |
Время: 11:29.
© OSzone.net 2001-