修改批处理脚本:按艺术家名整理歌曲至指定层级文件夹结构
批处理脚本:按艺术家整理歌曲文件夹结构
需求说明
- 歌曲文件名固定格式:
艺术家名 - 歌曲名.wav - 需实现以下整理逻辑:
- 识别同一艺术家的所有歌曲
- 以该艺术家第一首歌曲的歌曲名创建上层文件夹
- 在上层文件夹内创建以艺术家名命名的子文件夹
- 将该艺术家的所有歌曲移动至对应的子文件夹
原文件示例
Artist name1 - Song Name1.wav Artist name1 - Song Name2.wav Artist name2 - Song Name1.wav Artist name2 - Song Name2.wav Artist name2 - Song Name3.wav ...
期望最终文件夹结构
───ALBUMS │ ├───Song Name1 │ │ └───Artist name1 │ │ ├───Artist name1 - Song Name1.wav │ │ └───Artist name1 - Song Name2.wav │ └───Song Name1 │ └───Artist name2 │ ├───Artist name2 - Song Name1.wav │ ├───Artist name2 - Song Name2.wav │ └───Artist name2 - Song Name3.wav
修改后的批处理脚本
@echo off setlocal enabledelayedexpansion PushD %~dp0 :: 存储已处理过的艺术家,避免重复操作 set "processedArtists=" :: 遍历所有WAV文件,按艺术家分组处理 for /F "delims=" %%I in ('dir /a-d /o:n /b *.wav') do ( set "fileName=%%~nI" :: 按" - "拆分文件名,提取艺术家和歌曲名 for /F "delims=- tokens=1*" %%A in ("!fileName!") do ( set "artist=%%A" :: 去除艺术家名前后多余空格 set "artist=!artist: =!" set "songName=%%B" :: 去除歌曲名前的空格 set "songName=!songName:~1!" :: 检查当前艺术家是否已处理 if "!processedArtists:!artist!=!" equ "!processedArtists!" ( set "processedArtists=!processedArtists!!artist!|" :: 创建上层文件夹(第一首歌的歌名)和艺术家子文件夹 md "!songName!" 2>nul md "!songName!\!artist!" 2>nul :: 批量移动该艺术家的所有歌曲 for /F "delims=" %%J in ('dir /a-d /o:n /b "*!artist! - *.wav"') do ( move "%%J" "!songName!\!artist!" ) ) ) ) echo 歌曲整理完成! pause endlocal
关键逻辑说明
- 延迟扩展:启用
enabledelayedexpansion保证循环中变量的实时更新 - 文件名拆分:通过
for /F以-为分隔符拆分文件名,同时去除多余空格确保路径识别准确 - 去重处理:用
processedArtists变量记录已处理的艺术家,避免重复创建文件夹和重复移动文件 - 批量操作:识别到新艺术家时,一次性移动该艺术家的所有对应歌曲,提升处理效率
内容的提问来源于stack exchange,提问作者Ionut Bejinariu
相关产品推荐
相关产品推荐

