遍历文件夹中的所有文件,检查文件名的第一部分是否与差异文件夹中的任何文件匹配-如果不匹配,则移动 [英] loop through all files in folder, check if first part of filename matches any files in a diff folder-move if not
本文介绍了遍历文件夹中的所有文件,检查文件名的第一部分是否与差异文件夹中的任何文件匹配-如果不匹配,则移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有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"
和,并将文件名放在方括号前[通配符?]看看我是否已经在:
中有它的一个版本"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屋!
查看全文