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

[文件操作] [已解决]批处理将文件名中的汉字序数转换成阿拉伯数字序数【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

本帖最后由 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
复制代码
1

评分人数

TOP

谢谢。保存为ANSI编码就好了。

TOP

回复 7# whink


    俺测试完全正常,请保存为Ansi编码格式执行。

TOP

提示命令语法不正确。

TOP

本帖最后由 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
复制代码
1

评分人数

    • whink: 完美解决问题技术 + 1

TOP

提示系统找不到指定的文件。哪一行出错了呢

TOP

@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

TOP

运行了没有效果。原因未知

TOP

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

TOP

返回列表