标题: [文件操作] [已解决]批处理如何批量修改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 编辑
- @echo off
- for %%a in ( *.mp3 ) do (
- for /f "tokens=1,2 delims=-." %%i in ( "%%a" ) do ( ren "%%a" "%%j-%%i.mp3" )
- )
- pause
复制代码
参照别人的代码改了一个,文件名里多了两个空格,-的左右两边少了两个空格- @echo off
- for %%a in ( *.mp3 ) do (
- for /f "tokens=1,2 delims=-." %%i in ( "%%a" ) do ( ren "%%a" "%%j - %%i.mp3" )
- )
- pause
复制代码
改成这样以后错得更离谱
作者: Batcher 时间: 2019-8-23 11:47
- @echo off
- for /f "delims=" %%a in ('dir /b /a-d *.mp3 ^| findstr /c:" - "') do (
- for /f "tokens=1,2 delims=-. " %%i in ("%%a") do (
- ren "%%a" "%%j - %%i.mp3"
- )
- )
复制代码
作者: 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- @echo off&setlocal EnableDelayedExpansion
- for /f "tokens=1,2 delims=-." %%a in ('dir /b *.mp3') do (
- set var=%%a
- ::去除var变量左边第一个空格
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- if "!var:~0,1!"==" " set var=!var:~1!
- ::去除var变量右边第一个空格
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- if "!var:~-1!"==" " set var=!var:~0,-1!
- set jar=%%b
- ::去除jar变量左边第一个空格
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- if "!jar:~0,1!"==" " set jar=!jar:~1!
- ::去除jar变量右边第一个空格
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- if "!jar:~-1!"==" " set jar=!jar:~0,-1!
- ::重命名文件
- ren "%%a-%%b.mp3" "!jar!-!var!.mp3"
- )
复制代码
作者: impk 时间: 2019-8-23 13:09
本帖最后由 impk 于 2019-8-25 13:51 编辑
- @echo off
- setlocal EnableDelayedExpansion
- for /f "tokens=1,2 delims=-." %%a in ( 'dir /b *.mp3' ) do (
- set vara=%%a && set varb=%%b
- if "!vara:~0,1!"==" " set vara=!vara:~1!
- if "!vara:~-1!"==" " set vara=!vara:~0,-1!
- if "!varb:~0,1!"==" " set varb=!varb:~1!
- if "!varb:~-1!"==" " set varb=!varb:~0,-1!
- ren "%%a-%%b.mp3" "!varb! - !vara!.mp3"
- )
- 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- @echo off
- powershell –NoProfile –ExecutionPolicy Bypass ^
- Get-ChildItem '* - *.mp3' ^| ForEach-Object {;^
- $strA = $_.BaseName.Split('-.')[0].Trim();^
- $strB = $_.BaseName.Split('-.')[1].Trim();^
- $NewName = $strB + ' - ' + $strA + $_.Extension;^
- Rename-Item $_.Name $NewName;^
- }
复制代码
作者: 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 编辑
变通一下呢?通用有点难哦- @echo off
- for /f "delims=" %%a in ('dir /b /a-d *-*.mp3') do (
- for /f "tokens=1* delims=-" %%i in ("%%a") do (
- for /f "tokens=*" %%m in ("%%~nxi") do (
- for /f "tokens=*" %%n in ("%%~nj") do (
- ren "%%a" "%%~nxn - %%~nxm%%~xj"
- )
- )
- )
- )
- 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 |