我有75,000个用于卡拉OK系统的文件。每首歌都有音乐(.mp3
)和歌词(.cdg
)。因此,每首歌曲都有两个文件。
Artist - SongName [Karaoke Brand1].mp3
Artist - SongName [Karaoke Brand1].cdg
问题在于某些歌曲的版本很多(5-10)。 Brand1
是最好的,所以我只是使用标准的Windows搜索来过滤该品牌的所有文件,然后将其剪切并手动粘贴,从而为我提供了25,000个新的旧文件。
但是原始文件夹中有很多Brand1
没有版本的歌曲。在这种情况下,我更喜欢Brand2
和Brand3
,但并非每首歌都是由两者完成的。不管每首歌至少是由另一首来完成的。
我想遍历所有剩余的MP3文件(由于.cdg
的名称具有相同的扩展名,但扩展名不同,因此无需查看全部):
"D:/Karaoke/All"
并在方括号[wildcard?]之前获取文件名,然后查看是否已在其中找到版本:
"D:/Karaoke/Curated"
如果什么也不做,请移至下一个文件。
如果没有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
答案 0 :(得分: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\"
)
)
)
)
)