使用批处理文件复制和重命名音乐文件

Copy and rename music files with batch file

我有一个音乐目录,格式为D:%Artist%%Album%\Song.mp3。从这里开始,我创建了一个脚本,提示输入艺术家文件夹,然后在删除所有专辑文件夹后将所有 MP3 复制到同名的新文件夹中

D:\%Artist%\%Album%\Song.mp3 into D:\MP3s\%Artist%\Song.mp3

我真正想做的是重命名新位置中的所有歌曲文件,以包括专辑名称后跟下划线。如果艺术家根文件夹中有歌曲,它应该在歌曲名称前有一个下划线,以表明它不在专辑文件夹中。

D:\%Artist%\%Album%\%Song% into D:\MP3s\%Artist%\%Album%_Song.mp3 OR D:\MP3s\%Artist%\_Song.mp3

以下代码是我用来将所有子文件夹中的所有歌曲放入一个文件夹中的代码,但我不确定如何为重命名过程获取 albun 名称设置。这是我当前的代码

SET /P Artist=What is the artist folder to copy?
pushd D:\Music\%Artist%
for /r %%a in (*.mp3) do (
COPY "%%a" "D:\Music\MP3s\%%~nxa"
)
popd

我发现以下代码适用于我的情况。如果您有不同的文件结构深度,那么您将需要调整标记。我还发现如果同一位艺术家的脚本 运行 多次,它会复制文件但不会重命名它们,所以我添加了文件检查以查看最终文件名是否已经存在。

SETLOCAL enabledelayedexpansion
SET /P Artist=What is the artist folder to copy?
MD "D:\Music\MP3s\%Artist%"
PUSHD D:\Music\%Artist%
FOR /r %%a in (*.mp3) DO (
FOR /f "tokens=4,5 delims=\" %%I IN ("%%a") DO (
SET Song=%%J
SET Album=%%I
if "!Song!" == "" (
SET Song=!Album!
SET Album=
)
SET NewFileName="!Album!_!Song!"
)
CD D:\Music\MP3s\%Artist%
IF NOT EXIST !NewFileName! (
COPY "%%a" "D:\Music\MP3s\%Artist%\%%~nxa"
REN "D:\Music\MP3s\%Artist%\%%~nxa" !NewFileName!
)
)
POPD