[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

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

评分人数

    • impk: 有效,学习了技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

"tokens=1,2 delims=-. "
注意第二个双引号左边有个空格
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

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

回复 7# impk
bat的坑无处不在的
!!Mi.rror Mirror    -      M2 - M  e.mp3
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

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


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

TOP

回复 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. }
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# impk


!!Mi.rror Mirror    -      M2 - M  e.mp3
这种情况用任何脚本都解决不了,因为脚本无法判断M2属于作者还是曲名。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  impk


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



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

TOP

回复 12# impk


    你用的XP系统吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13# Batcher


    我用的XP系统

TOP

回复 14# impk


    那就不用考虑10楼的代码啦
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表