Board logo

标题: [文件操作] [已解决] 批处理怎样把文件名中的中文小写数字替换为阿拉伯数字? [打印本页]

作者: hkmhd    时间: 2011-9-29 11:26     标题: [已解决] 批处理怎样把文件名中的中文小写数字替换为阿拉伯数字?

本帖最后由 pcl_test 于 2017-6-22 17:53 编辑

问题已解决, 问题解决代码附在帖子最后. 另外自己加上了对繁体数字的处理.

一个文件夹里有许多使用中文数字的文件名, 例如 第一组 第二组 第三组

有无办法可以把从以数字开始的文件重命名为 阿拉伯数字
文件夹中不一定会出现某些数字, 例如带有零的文件

批处理的目标是, 对文件名中存在 [零, 一, 二, 三, 四, 五, 六, 七, 八, 九, 十, 十一, 十二 ...] 替换为 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ...]
另外, 也可以单独使用或者结合使用 vbs

例一个文件夹中有如下文件
第一组 张三
第二组 李四
第十二组 王五

需要把这些文件名字改为
第1组 张三
第2组 李四
第12组 王五


------------补充需求------------
感谢帮助十楼Bat1兄以及大家的帮助, 才想到另一些问题.
12楼处提供了 第与组 之间空格的处理办法, 不过还需要组与名字之间需要增加一个空格, 并且不能影响已有空格的文件.

还有一个问题, 批处理中的 set a=!a:十=1! 是把十替换成1, 第十组以后的可以解决, 但是如果遇到第十组的时候怎么办? 成了第一组了.

下面付出10楼的批处理
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%i in ("第一组 张三","第二组 李四","第三组 王五","第十二组 赵六","第二十五组 王八蛋") do (
  4. echo.>%%i.txt
  5. )
  6. echo 已经在当前目录下建立要改名的演示文件
  7. pause
  8. echo.
  9. for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
  10. set a=!a: =!
  11. set a=!a:二十=2!
  12. set a=!a:一=1!
  13. set a=!a:二=2!
  14. set a=!a:三=3!
  15. set a=!a:四=4!
  16. set a=!a:五=5!
  17. set a=!a:六=6!
  18. set a=!a:七=7!
  19. set a=!a:八=8!
  20. set a=!a:九=9!
  21. set a=!a:十=1!
  22. ren "%%i组%%j" "!a!%%~xi组%%j"
  23. )
  24. pause
复制代码
------------------------问题解决代码------------------------
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%i in ("一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","拾") do (
  4. echo.>"第%%i组 张%%i.txt"
  5. )
  6. echo 已经在当前目录下建立要改名的演示文件
  7. pause
  8. echo.
  9. for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
  10. if "!a:~-1!"=="十" set  a=!a:十=10!
  11. set a=!a: =!
  12. set a=!a:二十=2!
  13. set a=!a:一=1!
  14. set a=!a:二=2!
  15. set a=!a:三=3!
  16. set a=!a:四=4!
  17. set a=!a:五=5!
  18. set a=!a:六=6!
  19. set a=!a:七=7!
  20. set a=!a:八=8!
  21. set a=!a:九=9!
  22. set a=!a:十=1!
  23. if "!a:~-1!"=="拾" set  a=!a:拾=10!
  24. set a=!a:壹=1!
  25. set a=!a:贰=2!
  26. set a=!a:叁=3!
  27. set a=!a:肆=4!
  28. set a=!a:伍=5!
  29. set a=!a:陸=6!
  30. set a=!a:柒=7!
  31. set a=!a:捌=8!
  32. set a=!a:玖=9!
  33. set a=!a:拾=1!
  34. ren "%%i组%%j" "!a!%%~xi组 %%j"
  35. )
  36. pause
复制代码

作者: Batcher    时间: 2011-9-29 11:44

在顶楼给几个以零开始的文件名做例子吧
作者: BAT1    时间: 2011-9-29 12:18

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%i in (第一组,第二组,第三组) do (
  4. echo.>%%i.txt
  5. echo.>零%%i.txt
  6. )
  7. echo 已经在当前目录下建立要改名的演示文件
  8. pause>nul
  9. echo.
  10. for /f %%i in ('dir /b 零*.txt') do (
  11. set /p a=把%%i改成什么?
  12. ren "%~dp0%%i" "!a!".txt
  13. )
  14. echo 修改完闭!
  15. pause
复制代码
]
楼主是不是这样的意思???
作者: hkmhd    时间: 2011-9-29 22:49

已经补充例子了
就是把汉字转成数字显示
作者: ArdentMan    时间: 2011-9-29 23:10

最好能将你的文件夹下的文件截个图上来
你的描述是很模糊的
不好写代码
作者: Batcher    时间: 2011-9-29 23:20

回复 4# hkmhd


你补充的例子里面哪个是以零开始的文件
作者: 601997526    时间: 2011-9-30 10:45

本帖最后由 601997526 于 2011-9-30 16:51 编辑

可以用set替换
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. for /f "delims=" %%i in ('dir /b') do (set a=%%~ni
  3. set a=!a:一=1!
  4. set a=!a:二=2!
  5. set a=!a:十=1!
  6. echo !a!%%~xi
  7. )
  8. pause
复制代码

作者: zaixinxiangnian    时间: 2011-9-30 13:52

回复 7# 601997526


    你个思路我觉得非常好
作者: hkmhd    时间: 2011-10-2 23:24

本帖最后由 hkmhd 于 2011-10-2 23:26 编辑

抱歉, 之前编辑不小心删除了某些字, 使得看起来不太理解意思.

另外顺便补充了更详细的要求


简单地说, 就是想能不能有类似于数组的东西对目标的内容进行一个替换.
这个问题里, 应该 VBS 比 Bat 更能很好的处理这个问题吧?
作者: BAT1    时间: 2011-10-3 01:06     标题: 7楼的演示代码

本帖最后由 BAT1 于 2011-10-3 01:25 编辑
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%i in ("第一组 张三","第二组 李四","第三组 王五","第十二组 赵六","第二十五组 王八蛋") do (
  4. echo.>%%i.txt
  5. )
  6. echo 已经在当前目录下建立要改名的演示文件
  7. pause
  8. echo.
  9. for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
  10. set a=!a:二十=2!
  11. set a=!a:一=1!
  12. set a=!a:二=2!
  13. set a=!a:三=3!
  14. set a=!a:四=4!
  15. set a=!a:五=5!
  16. set a=!a:六=6!
  17. set a=!a:七=7!
  18. set a=!a:八=8!
  19. set a=!a:九=9!
  20. set a=!a:十=1!
  21. ren "%%i组%%j" "!a!%%~xi组%%j"
  22. )
  23. pause
复制代码
替换数字所用的关键代码借用7楼的601997526 。
注:本脚本并非用于商业或营利等用途,希望601997526 不要告我侵仅。
作者: hkmhd    时间: 2011-10-3 11:44

本帖最后由 hkmhd 于 2011-10-3 13:22 编辑

感谢帮助, 才想到另一个问题.
假如文件名中出现 "第   十二   组王五" 这样, 在 第与组之间出现很多空格, 有无办法去除?
另外, 像上面, 组与王五之间是没有空格的, 可否给他加个空格.
作者: BAT1    时间: 2011-10-3 12:55

回复 11# hkmhd

请将您补充的需求更新至顶楼,谢谢!
将此句添加至第10行
set a=!a: =!
作者: hkmhd    时间: 2011-10-3 13:18

回复  hkmhd

请将您补充的需求更新至顶楼,谢谢!
将此句添加至第10行
set a=!a: =!
BAT1 发表于 2011-10-3 12:55



   
感谢帮助, 不过想到一个问题.
空格仅处理第与组之间的空格, 但是不处理组之后的.
如果这里我真的使用下面的重命名方式, 会对已有空格的文件名增加更多的空格.
  1. ren "%%i组%%j" "!a!%%~xi组 %%j"
复制代码
另外还有一个问题, 批处理中的 set a=!a:十=1! 是把十替换成1, 第十组以后的可以解决, 但是如果遇到第十组的时候怎么办? 但是成了第一组了.
作者: BAT1    时间: 2011-10-3 13:27

回复 13# hkmhd
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for %%i in ("一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五") do (
  4. echo.>"第%%i组 张%%i.txt"
  5. )
  6. echo 已经在当前目录下建立要改名的演示文件
  7. pause
  8. echo.
  9. for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
  10. if "!a:~-1!"=="十" set  a=!a:十=10!
  11. set a=!a: =!
  12. set a=!a:二十=2!
  13. set a=!a:一=1!
  14. set a=!a:二=2!
  15. set a=!a:三=3!
  16. set a=!a:四=4!
  17. set a=!a:五=5!
  18. set a=!a:六=6!
  19. set a=!a:七=7!
  20. set a=!a:八=8!
  21. set a=!a:九=9!
  22. set a=!a:十=1!
  23. ren "%%i组%%j" "!a!%%~xi组 %%j"
  24. )
  25. pause
复制代码

作者: hkmhd    时间: 2011-10-3 13:47

十分感谢 Bat1 的帮助
以后学生上交的作业就不用自己动手重命名了.
这个问题一直很困扰




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