Случайное название файлов - PullRequest
0 голосов
/ 04 мая 2018

Я купил USB-ключ, который может читать MP3. К сожалению, у него нет «случайного» режима, поэтому он всегда читает музыку в одном и том же порядке. Я хотел бы рандомизировать это "легко". Для этого я решил регулярно заменять имя каждого файла хэшем предыдущего имени файла (и добавлять .mp3, чтобы не перепутать проигрыватель).

Я привык к bash , а не партия , но я попробовал несколько вещей. Вот как далеко я могу пройти:

for %f in (.\*.mp3) do for /F %i in ('echo %f | hashsum') do @echo move %f %i.mp3

Несколько заметок:

  • Я не смог найти способ использовать certutil пакета для генерации хэша случайной строки, поэтому я использую hashsum
  • При этом используется один% вместо двух, потому что его еще нет в пакетном скрипте
  • Второй цикл for происходит от здесь
  • Это не делает то, что я ожидаю. Я получаю сообщение об ошибке, что канал (|) был неожиданным.

Я уверен, что приближаюсь, но две точки все еще неясны:

  1. Не может ли certutil помочь мне создать хеш строки? (без использования временных файлов)
  2. Как я могу передать вывод (переданной по каналу) команды в качестве аргумента другой команды?

1 Ответ

0 голосов
/ 04 мая 2018

Как насчет

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
FOR /f "tokens=1*delims=" %%a IN (
 'dir /b /a-d "%sourcedir%\*.mp3" '
 ) DO ren "%sourcedir%\%%a" "!random!.mp3" 2>nul
)

GOTO :EOF

Вам необходимо изменить настройку sourcedir в соответствии с вашими обстоятельствами.

Устанавливает переменную, содержащую требуемое имя каталога, затем переименовывает каждый файл .mp3 в этом каталоге в случайное число .mp3, которое полностью исключает хеширование.

Если переименование пытается переименовать файл с существующим именем, 2>nul подавляет сообщение об ошибке - но последовательность должна быть случайной после запуска процедуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...