Board logo

标题: [文件操作] [已解决]批处理如何批量修改mp3文件名 [打印本页]

作者: impk    时间: 2019-8-23 11:12     标题: [已解决]批处理如何批量修改mp3文件名

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

文件夹里的mp3,以【曲名 - 作者.mp3】这种格式命名,想批量改名为【作者 - 曲名.mp3】
这个批处理应该怎么写?
作者: impk    时间: 2019-8-23 11:19

本帖最后由 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
复制代码
改成这样以后错得更离谱
作者: Batcher    时间: 2019-8-23 11:47

  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-d *.mp3 ^| findstr /c:" - "') do (
  3.     for /f "tokens=1,2 delims=-. " %%i in ("%%a") do (
  4.         ren "%%a" "%%j - %%i.mp3"
  5.     )
  6. )
复制代码

作者: Batcher    时间: 2019-8-23 11:48

"tokens=1,2 delims=-. "
注意第二个双引号左边有个空格
作者: impk    时间: 2019-8-23 12:52

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

又发现一个问题
比如这个歌名【Mirror Mirror - M2M.mp3】
运行批处理后得到的结果是【Mirror - Mirror.mp3】
这种歌delims无法用空格做分隔符
作者: impk    时间: 2019-8-23 13:06

这里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. )
复制代码

作者: impk    时间: 2019-8-23 13:09

本帖最后由 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
复制代码
可以简化成这样
作者: zaqmlp    时间: 2019-8-23 13:39

回复 7# impk
bat的坑无处不在的
!!Mi.rror Mirror    -      M2 - M  e.mp3
作者: impk    时间: 2019-8-23 14:27

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


这种就只能手动改了,没法用脚本偷懒
这么复杂歌名遇到的概率约等于零
作者: Batcher    时间: 2019-8-23 15:31

回复 5# impk


test.bat
  1. @echo off
  2. powershell –NoProfile –ExecutionPolicy Bypass ^
  3.     Get-ChildItem '* - *.mp3' ^| ForEach-Object {;^
  4.     $strA = $_.BaseName.Split('-.')[0].Trim();^
  5.     $strB = $_.BaseName.Split('-.')[1].Trim();^
  6.     $NewName = $strB + ' - ' + $strA + $_.Extension;^
  7.     Rename-Item $_.Name $NewName;^
  8. }
复制代码

作者: Batcher    时间: 2019-8-23 15:33

回复 9# impk


!!Mi.rror Mirror    -      M2 - M  e.mp3
这种情况用任何脚本都解决不了,因为脚本无法判断M2属于作者还是曲名。
作者: impk    时间: 2019-8-23 15:37

回复  impk


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



高级脚本完全看不懂,这种脚本怎么用?要安装什么运行环境么?我直接保存成bat运行没效果
作者: Batcher    时间: 2019-8-23 16:03

回复 12# impk


    你用的XP系统吗?
作者: impk    时间: 2019-8-23 16:05

回复 13# Batcher


    我用的XP系统
作者: Batcher    时间: 2019-8-23 16:08

回复 14# impk


    那就不用考虑10楼的代码啦
作者: netdzb    时间: 2019-8-24 10:06

回复 1# impk

我和楼主是有缘人啊。这个问题我也问过。我用的也是xp。
我正在收集各软件在xp的最高版本。
希望可以交流一下。
作者: impk    时间: 2019-8-24 17:19

回复 16# netdzb


    版本越高体积越大,还不如老版简单干净
作者: terse    时间: 2019-8-24 21:17

本帖最后由 terse 于 2019-8-26 18:13 编辑

变通一下呢?通用有点难哦
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /a-d *-*.mp3') do (
  3.      for /f "tokens=1* delims=-" %%i in ("%%a") do (
  4.           for /f "tokens=*" %%m in ("%%~nxi") do (
  5.                for /f "tokens=*" %%n in ("%%~nj") do (
  6.                     ren "%%a" "%%~nxn - %%~nxm%%~xj"
  7.                )
  8.           )
  9.      )
  10. )
  11. pausee
复制代码

作者: impk    时间: 2019-8-25 13:53

回复 18# terse


    这个测试没效果
作者: terse    时间: 2019-8-25 22:41

回复 19# impk
去掉第四行echo
作者: impk    时间: 2019-8-26 14:13

回复 20# terse


测试有效,不过文件名前面多一空格
作者: terse    时间: 2019-8-26 18:14

回复 21# impk
修改了一下
作者: impk    时间: 2019-8-26 21:39

回复 22# terse


这次没问题了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2