遍历文件夹中的所有文件,检查文件名的第一部分是否与差异文件夹中的任何文件匹配-如果不匹配,则移动 [英] loop through all files in folder, check if first part of filename matches any files in a diff folder-move if not

查看:17
本文介绍了遍历文件夹中的所有文件,检查文件名的第一部分是否与差异文件夹中的任何文件匹配-如果不匹配,则移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有75,000个卡拉OK系统的文件。每首歌都有音乐(.mp3)和歌词(.cdg)。因此,每首歌都有两个文件。

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

问题是有些歌曲有很多版本(5-10个)。Brand1是最好的,所以我刚刚使用标准的Windows搜索来过滤该品牌的所有文件,并手动剪切和粘贴它们,这给了我25,000个文件在新的管理旧的。

Brand1原始文件夹中有许多歌曲没有版本。在这种情况下,我更喜欢Brand2Brand3,但并不是每首歌都能同时完成。无论如何,每首歌至少都是由其中一人完成的。

我想循环遍历中的所有剩余MP3文件(根本不需要查看,因为.cdg同名但扩展名不同):

"D:/Karaoke/All" 

和,并将文件名放在方括号前[通配符?]看看我是否已经在:

中有它的一个版本
"D:/Karaoke/Curated"

如果不执行任何操作,则移动到下一个文件。

如果不存在Brand2,则将Brand2(完整文件名.mp3.cdg)移到D:/Karaoke/Curated

如果Brand2不存在,请查看Brand3是否存在并改用那个

所有品牌的文件命名都相同,只是方括号[Brand]中的文本不同。

编辑 我到目前为止所想出来的

            @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

推荐答案

根据您的要求,以下是可能的解决方案:

@echo off

cd /d "D:KaraokeAll"
for %%A IN ("*.mp3") do (
    for /f "delims=[]" %%B IN ("%%~nA") do (
        dir /A "D:KaraokeCurated\%%B*" >nul 2>&1
        if errorlevel 1 (
            if exist "%%B[Karaoke Brand2].mp3" (
                move "%%B[Karaoke Brand2].*" "D:KaraokeCurated"
            ) else (
                if exist "%%B[Karaoke Brand3].mp3" (
                    move "%%B[Karaoke Brand3].*" "D:KaraokeCurated"
                )
            )
        )
    )
)

这篇关于遍历文件夹中的所有文件,检查文件名的第一部分是否与差异文件夹中的任何文件匹配-如果不匹配,则移动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆