You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:52:15