Я собираюсь предположить, что вручную, вы имеете в виду, что вы не хотите удалять их по одному.
В Windows вы можете сделать это, просто перейдя на верхний уровень каталогов музыкальных файлов и напечатав:
DEL *.mp4 /S
Флаг '/S' удаляет файлы не только в текущем каталоге, но и во всех подкаталогах.
В Linux, также из верхнего каталога, вы должны набрать:
find . -name '*.mp4' -exec /usr/bin/rm '{}' \;
Используйте полный путь к «rm», чтобы не использовать псевдоним «rm -i». Кроме того, фигурные скобки в кавычках, если у вас есть имена файлов с пробелами в них.
Итак, ОС - это Windows, и вполне возможно, что MP4 - единственная версия трека, и в этом случае мы не хотим его удалять.
Учитывая это, deduplicate.bat будет выглядеть так:
@ECHO OFF
FOR /F "usebackq delims=" %%i in ( `dir /b /s *.mp4` ) do (
IF EXIST "%%~dpni.mp3" (
DEL "%%i"
)
)
То есть сделать рекурсивный список каталогов всех файлов MP4. Для каждого найденного файла MP4 проверьте, существует ли соответствующий файл MP3. Это делается путем объединения
- %% ~ di Буква диска
- %% ~ pi Путь к файлу
- %% ~ ni Имя файла, исключая расширение
в %% ~ dpni, а затем добавив расширение .mp3. Делая это, мы гарантируем, что файлы MP4 и MP3, если они оба существуют, находятся в одном и том же каталоге, принимая во внимание проблему, о которой вы упоминали в своем комментарии выше, относительно файла MP3 с заданным именем и файла MP4. с тем же именем, но в другом каталоге.
Таким образом, если файл MP3 существует, то файл MP4 является дубликатом и может быть безопасно удален.
И ради полноты ...
Заметки
- Кавычки необходимы вокруг всей структуры имени файла, если в имени есть пробелы.
- Удвоенные знаки процента, потому что они в файле. Если вы введете это в консольном окне, то каждый экземпляр « %% » станет одним « % ».