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

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

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

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

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

TOP

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

评分人数

    • hkmhd: 太棒了~问题解决技术 + 1

TOP

回复  hkmhd

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



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

TOP

回复 11# hkmhd

请将您补充的需求更新至顶楼,谢谢!
将此句添加至第10行
set a=!a: =!

TOP

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

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

TOP

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 不要告我侵仅。
1

评分人数

    • hkmhd: 感谢帮助, 不过有一个新的要求, 看看回帖. ...技术 + 1

TOP

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

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

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


简单地说, 就是想能不能有类似于数组的东西对目标的内容进行一个替换.
这个问题里, 应该 VBS 比 Bat 更能很好的处理这个问题吧?

TOP

回复 7# 601997526


    你个思路我觉得非常好

TOP

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

评分人数

    • hkmhd: 感谢提供一个思路技术 + 1

TOP

回复 4# hkmhd


你补充的例子里面哪个是以零开始的文件
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

最好能将你的文件夹下的文件截个图上来
你的描述是很模糊的
不好写代码
一路飘过的鸟~~~

TOP

已经补充例子了
就是把汉字转成数字显示

TOP

  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
复制代码
]
楼主是不是这样的意思???
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

在顶楼给几个以零开始的文件名做例子吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表