Board logo

标题: [文件操作] [已解决]批处理将文件名中的汉字序数转换成阿拉伯数字序数【2】 [打印本页]

作者: whink    时间: 2022-8-6 11:49     标题: [已解决]批处理将文件名中的汉字序数转换成阿拉伯数字序数【2】

本帖最后由 whink 于 2022-8-6 20:32 编辑

将下面的第三集改成第3集,第十一集改成第11集。
在喜马拉雅里面下载的文件,出现了新问题。论坛里的其它类似代码运行没有效果。这里先谢过各位大佬了。

【01】流言四起 第八集|多多罗.mp3
【01】流言四起 第六集|多多罗.mp3
【01】流言四起 第四集|多多罗.mp3
【02】发财的方法 第一集|多多罗.mp3
【02】发财的方法 第七集|多多罗.mp3
【02】发财的方法 第三集|多多罗.mp3
【02】发财的方法 第九集|多多罗.mp3
【02】发财的方法 第二集|多多罗.mp3
【02】发财的方法 第五集|多多罗.mp3
【02】发财的方法 第八集|多多罗.mp3
【02】发财的方法 第六集|多多罗.mp3
【02】发财的方法 第十一集|多多罗.mp3
【02】发财的方法 第十集|多多罗.mp3
【02】发财的方法 第四集|多多罗.mp3
【03】来自头顶的危险 第一集|多多罗.mp3
【03】来自头顶的危险 第七集|多多罗.mp3
【03】来自头顶的危险 第三集|多多罗.mp3
【03】来自头顶的危险 第九集|多多罗.mp3
【03】来自头顶的危险 第二集|多多罗.mp3
作者: hfxiang    时间: 2022-8-6 12:16

修改原有的脚本读入行为:
  1. for /f "tokens=1-2* delims=第集" %%a in ('dir /b /a-d "*.mp3"') do ...
复制代码
即可
作者: whink    时间: 2022-8-6 12:32

运行了没有效果。原因未知
作者: whink    时间: 2022-8-6 12:38

@echo off
setlocal enabledelayedexpansion
for %%i in (一 二 三 四 五 六 七 八 九 十) do (
set /a x+=1
set _%%i=!x!
)
for /f "tokens=1-2* delims=第集" %%a in ('dir /b /a-d "*.mp3"') do (
        set str=%%a
        set m1=!str:~,2!
        set m2=!str:~2,1!
        if "!m1:~,1!"=="十" (
                set /a n=10+_!m1:~1,1!
        ) else if "!m1:~1,1!"=="十" (
                set /a n=_!m1:~,1!*10+_!m2!
        ) else (
                set /a n=_!m1!
        )
        call set "str1=%%str:十=%%"
        if !str1!. EQU !str!. set /a n=0+_!m1!
        set n=0!n!
        set n=!n:~-2!
        ren "第%%a集%%b" "第!n!集%%b"
)
endlocal
作者: whink    时间: 2022-8-6 12:39

提示系统找不到指定的文件。哪一行出错了呢
作者: hfxiang    时间: 2022-8-6 12:43

本帖最后由 hfxiang 于 2022-8-6 12:45 编辑

回复 5# whink


完整写法如下:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (一 二 三 四 五 六 七 八 九 十) do (
  4. set /a x+=1
  5. set _%%i=!x!
  6. )
  7. for /f "tokens=1-2* delims=第集" %%a in ('dir /b /a-d "*.mp3"') do (
  8. set str=%%b
  9. set m1=!str:~,2!
  10. set m2=!str:~2,1!
  11. if "!m1:~,1!"=="十" (
  12. set /a n=10+_!m1:~1,1!
  13. ) else if "!m1:~1,1!"=="十" (
  14. set /a n=_!m1:~,1!*10+_!m2!
  15. ) else (
  16. set /a n=_!m1!
  17. set n=0!n!
  18. )
  19. rem set n=!n:~-2!
  20. ren "%%a第%%b集%%c" "%%a第!n!集%%c"
  21. )
  22. endlocal
复制代码

作者: whink    时间: 2022-8-6 12:53

提示命令语法不正确。
作者: hfxiang    时间: 2022-8-6 13:25

回复 7# whink


    俺测试完全正常,请保存为Ansi编码格式执行。
作者: whink    时间: 2022-8-6 13:42

谢谢。保存为ANSI编码就好了。
作者: qixiaobin0715    时间: 2022-8-16 16:57

本帖最后由 qixiaobin0715 于 2022-11-27 09:57 编辑

通用些的代码:章回数小于10000;兼顾“第???集(或章、回)”在最前面或中间;文件名其它地方最好不要出现“第或章或回或集”。代码保存为ANSI编码:
  1. @echo off
  2. set m=3
  3. setlocal enabledelayedexpansion
  4. for %%i in (一 二 三 四 五 六 七 八 九) do (
  5.     set /a x+=1
  6.     set /a _%%i=!x!
  7.     set y=1
  8.     for %%j in (十 百 千) do (
  9.         set /a y*=10
  10.         set /a _%%i%%j=!x!*!y!
  11.     )
  12. )
  13. set _十=10
  14. for /f "tokens=1,2* delims=第集" %%a in ('dir /b /a-d "*.mp3"') do (
  15.     if "%%c"=="" (
  16.         set str=%%a
  17.     ) else (
  18.         set str=%%b
  19.     )
  20.     set str=!str:零=!
  21.     for %%i in (十 百 千) do set str=!str:%%i=%%i !
  22.     set n=10000
  23.     for %%j in (!str!) do set /a n+=_%%j
  24.     if "%%c"=="" (
  25.         ren "第%%a集%%b" "第!n:~-%m%!集%%b"
  26.     ) else (
  27.         ren "%%a第%%b集%%c" "%%a第!n:~-%m%!集%%c"
  28.     )
  29. )
  30. pause
复制代码





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