Windows Batch语言变量修改:提取音乐文件名中的曲目名
批处理实现从文件名中提取最后一个"- "后的曲目名
针对你需要从包含多个"- "的音乐文件名变量中提取曲目名的需求,这里提供两种实用的批处理实现方案:
方案一:针对MP3后缀的快速处理
适用于文件名固定为MP3格式的场景:
@echo off setlocal enabledelayedexpansion :: 替换成你的文件名变量 set "music_file=David Bowie - Greatest Hits - Space Oddity.mp3" :: 第一步:去掉.mp3后缀 set "name_no_ext=!music_file:~0,-4!" :: 第二步:循环截取,保留最后一个"- "之后的内容 set "track_name=!name_no_ext!" :loop if "!track_name:- =!"=="!track_name!" goto end_loop set "track_name=!track_name:* - =!" goto loop :end_loop echo 提取的曲目名:!track_name! endlocal
方案二:通用格式处理(支持任意文件后缀)
如果需要兼容不同音乐格式(如.flac、.wav等),可以用这个更通用的版本:
@echo off setlocal enabledelayedexpansion :: 替换成你的文件名变量 set "music_file=David Bowie - Space Oddity.flac" :: 第一步:移除文件后缀(不管是什么格式) set "name_only=!music_file!" :remove_ext if "!name_only:~-1!"=="." goto ext_removed set "name_only=!name_only:~0,-1!" goto remove_ext :ext_removed :: 第二步:提取最后一个"- "后的曲目名 set "track_name=!name_only!" :find_last_dash if "!track_name:- =!"=="!track_name!" goto done set "track_name=!track_name:* - =!" goto find_last_dash :done echo 提取的曲目名:!track_name! endlocal
关键逻辑说明
enabledelayedexpansion开启延迟扩展,确保循环中变量的动态修改能生效!track_name:* - =!的作用是删除变量中第一个"- "及之前的所有内容,通过循环重复这个操作,最终剩下的就是最后一个"- "之后的内容- 通用方案里的后缀移除逻辑,是通过逐字符截取直到遇到
.,从而分离出不含后缀的文件名主体
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

