【问题标题】:遍历文件夹中的所有文件,检查文件名的第一部分是否与 diff 文件夹中的任何文件匹配 - 如果不匹配,请移动
【发布时间】:2022-01-23 06:17:34
【问题描述】:

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

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

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

但是原文件夹中有很多Brand1没有版本的歌曲。在这种情况下,我更喜欢Brand2Brand3,但并不是每首歌都由两者完成。不管每首歌至少是由一个或另一个完成的。

我想遍历所有剩余的 MP3 文件(无需查看 ALL,因为 .cdgs 是同名但扩展名不同):

"D:/Karaoke/All" 

并在方括号[通配符?]之前取文件名,看看我是否已经有它的版本:

"D:/Karaoke/Curated"

如果没有任何操作,则移至下一个文件。

如果不存在则将Brand2(如果存在)(完整文件名.mp3 AND .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

【问题讨论】:

  • 请注意,Stack OverFlow 不是免费的代码编写服务。
  • 我知道 Stack OverFlow 是什么和不是什么。我每天在游戏开发不和谐和论坛中帮助人们。我需要一些个人项目的帮助,并且认为一次性脚本在 Windows 中执行它会很简单。无论如何,谢谢。我会自己解决的。这里不是一群友好的人,呵呵。新年快乐

标签: loops batch-file move


【解决方案1】:

根据您的要求,这是一个可能的解决方案:

@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\"
                )
            )
        )
    )
)

【讨论】:

  • dir /b D:\Karaoke\Curated | findstr /c:"%%B" 无需扫描整个目录并通过管道调用第二个 cmd。只需使用 dir /b "D:\Karaoke\Curated\%%B*" >Nul 2>&1 这同样会触发错误级别。您不妨附加|findstr /i "Brand[23] 以检查是否存在所需的替代品牌之一。
猜你喜欢
  • 2017-04-16
  • 2021-01-19
  • 2014-12-03
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多