перебрать все файлы в папке, проверить, соответствует ли первая часть имени файла каким-либо файлам в папке diff, переместить, если нет - PullRequest
0 голосов
/ 03 января 2019

У меня 75 000 файлов для караоке-системы. Для каждой песни есть музыка (.mp3) и текст (.cdg). Итак, для каждой песни есть два файла.

Artist - SongName [Karaoke Brand1].mp3
Artist - SongName [Karaoke Brand1].cdg

Проблема в том, что некоторые песни имеют много версий (5-10). Brand1 - лучший вариант, поэтому я просто использовал стандартный поиск Windows, чтобы отфильтровать все файлы этой марки, вырезать их и вставить вручную, что дало мне 25 000 файлов в новой версии.

Но в исходной папке есть много песен, для которых Brand1 не имеет версии. Я предпочитаю Brand2 и Brand3 в этом случае, но не каждая песня сделана обоими. Независимо от того, что каждая песня, по крайней мере, исполняется одним или другим.

Я хочу просмотреть все оставшиеся MP3-файлы (нет необходимости смотреть на ALL, поскольку .cdg имеют одно и то же имя с другим расширением):

"D:/Karaoke/All" 

и взять имя файла ДО квадратных скобок [подстановочный знак?] И посмотреть, есть ли у меня его версия в:

"D:/Karaoke/Curated"

Если ничего не делать и перейти к следующему файлу.

Если нет, переместите Brand2, если оно существует (полное имя файла .mp3 И .cdg) в D:/Karaoke/Curated.

Если Brand2 не существует, посмотрите, есть ли Brand3, и используйте его вместо

Имена файлов одинаковы для всех брендов, только текст в скобках [Brand] будет другим.

EDIT что я придумала до сих пор

            @echo off
            setlocal enabledelayedexpansion
            for %%i in (*.mp3) do (
                for /f "tokens=1 delims=[" %%a in ("%%i") DO (
            REM get "checkable name first"
            REM     echo %%a
                    set checkName=%%a
            REM     echo !checkName!
                )
                echo !checkName!
            )
            exit

1 Ответ

0 голосов
/ 03 января 2019

Вот возможное решение в соответствии с вашими требованиями:

@echo off

cd /d "D:\Karaoke\All"
for %%A IN ("*.mp3") do (
    for /f "delims=[]" %%B IN ("%%~nA") do (
        dir /A "D:\Karaoke\Curated\%%B*" >nul 2>&1
        if errorlevel 1 (
            if exist "%%B[Karaoke Brand2].mp3" (
                move "%%B[Karaoke Brand2].*" "D:\Karaoke\Curated\"
            ) else (
                if exist "%%B[Karaoke Brand3].mp3" (
                    move "%%B[Karaoke Brand3].*" "D:\Karaoke\Curated\"
                )
            )
        )
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...