[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何批量修改mp3文件名

本帖最后由 impk 于 2019-9-13 19:57 编辑

文件夹里的mp3,以【曲名 - 作者.mp3】这种格式命名,想批量改名为【作者 - 曲名.mp3】
这个批处理应该怎么写?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 impk 于 2019-8-23 11:42 编辑
  1. @echo off
  2. for %%a in ( *.mp3 ) do (
  3. for /f "tokens=1,2 delims=-." %%i in ( "%%a" ) do ( ren "%%a" "%%j-%%i.mp3" )
  4. )
  5. pause
复制代码
参照别人的代码改了一个,文件名里多了两个空格,-的左右两边少了两个空格
  1. @echo off
  2. for %%a in ( *.mp3 ) do (
  3. for /f "tokens=1,2 delims=-." %%i in ( "%%a" ) do ( ren "%%a" "%%j - %%i.mp3" )
  4. )
  5. pause
复制代码
改成这样以后错得更离谱

TOP

本帖最后由 impk 于 2019-8-23 12:55 编辑

又发现一个问题
比如这个歌名【Mirror Mirror - M2M.mp3】
运行批处理后得到的结果是【Mirror - Mirror.mp3】
这种歌delims无法用空格做分隔符

TOP

这里16楼是正确答案
http://www.bathome.net/viewthrea ... mp;extra=#pid222966
  1. @echo off&setlocal EnableDelayedExpansion  
  2. for /f "tokens=1,2 delims=-." %%a in ('dir /b *.mp3') do (
  3. set var=%%a
  4. ::去除var变量左边第一个空格
  5. if "!var:~0,1!"==" " set var=!var:~1!
  6. if "!var:~0,1!"==" " set var=!var:~1!
  7. if "!var:~0,1!"==" " set var=!var:~1!
  8. if "!var:~0,1!"==" " set var=!var:~1!
  9. if "!var:~0,1!"==" " set var=!var:~1!
  10. if "!var:~0,1!"==" " set var=!var:~1!
  11. if "!var:~0,1!"==" " set var=!var:~1!
  12. if "!var:~0,1!"==" " set var=!var:~1!
  13. ::去除var变量右边第一个空格
  14. if "!var:~-1!"==" " set var=!var:~0,-1!
  15. if "!var:~-1!"==" " set var=!var:~0,-1!
  16. if "!var:~-1!"==" " set var=!var:~0,-1!
  17. if "!var:~-1!"==" " set var=!var:~0,-1!
  18. if "!var:~-1!"==" " set var=!var:~0,-1!
  19. if "!var:~-1!"==" " set var=!var:~0,-1!
  20. if "!var:~-1!"==" " set var=!var:~0,-1!
  21. if "!var:~-1!"==" " set var=!var:~0,-1!
  22. set jar=%%b
  23. ::去除jar变量左边第一个空格
  24. if "!jar:~0,1!"==" " set jar=!jar:~1!
  25. if "!jar:~0,1!"==" " set jar=!jar:~1!
  26. if "!jar:~0,1!"==" " set jar=!jar:~1!
  27. if "!jar:~0,1!"==" " set jar=!jar:~1!
  28. if "!jar:~0,1!"==" " set jar=!jar:~1!
  29. if "!jar:~0,1!"==" " set jar=!jar:~1!
  30. if "!jar:~0,1!"==" " set jar=!jar:~1!
  31. if "!jar:~0,1!"==" " set jar=!jar:~1!
  32. ::去除jar变量右边第一个空格
  33. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  34. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  35. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  36. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  37. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  38. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  39. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  40. if "!jar:~-1!"==" " set jar=!jar:~0,-1!
  41. ::重命名文件
  42. ren "%%a-%%b.mp3" "!jar!-!var!.mp3"
  43. )
复制代码

TOP

本帖最后由 impk 于 2019-8-25 13:51 编辑
  1. @echo off
  2. setlocal EnableDelayedExpansion  
  3. for /f "tokens=1,2 delims=-." %%a in ( 'dir /b *.mp3' ) do (
  4. set vara=%%a && set varb=%%b
  5. if "!vara:~0,1!"==" " set vara=!vara:~1!
  6. if "!vara:~-1!"==" " set vara=!vara:~0,-1!
  7. if "!varb:~0,1!"==" " set varb=!varb:~1!
  8. if "!varb:~-1!"==" " set varb=!varb:~0,-1!
  9. ren "%%a-%%b.mp3" "!varb! - !vara!.mp3"
  10. )
  11. pause
复制代码
可以简化成这样

TOP

回复  impk
bat的坑无处不在的
!!Mi.rror Mirror    -      M2 - M  e.mp3
zaqmlp 发表于 2019-8-23 13:39


这种就只能手动改了,没法用脚本偷懒
这么复杂歌名遇到的概率约等于零

TOP

回复  impk


test.bat
Batcher 发表于 2019-8-23 15:31



高级脚本完全看不懂,这种脚本怎么用?要安装什么运行环境么?我直接保存成bat运行没效果

TOP

回复 13# Batcher


    我用的XP系统

TOP

回复 16# netdzb


    版本越高体积越大,还不如老版简单干净

TOP

回复 18# terse


    这个测试没效果

TOP

回复 20# terse


测试有效,不过文件名前面多一空格

TOP

回复 22# terse


这次没问题了

TOP

返回列表