标题: [文件操作] [已解决] 批处理怎样把文件名中的中文小写数字替换为阿拉伯数字? [打印本页]
作者: 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楼的批处理- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for %%i in ("第一组 张三","第二组 李四","第三组 王五","第十二组 赵六","第二十五组 王八蛋") do (
- echo.>%%i.txt
- )
- echo 已经在当前目录下建立要改名的演示文件
- pause
- echo.
- for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
- set a=!a: =!
- set a=!a:二十=2!
- set a=!a:一=1!
- set a=!a:二=2!
- set a=!a:三=3!
- set a=!a:四=4!
- set a=!a:五=5!
- set a=!a:六=6!
- set a=!a:七=7!
- set a=!a:八=8!
- set a=!a:九=9!
- set a=!a:十=1!
- ren "%%i组%%j" "!a!%%~xi组%%j"
- )
- pause
复制代码
------------------------问题解决代码------------------------- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for %%i in ("一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","拾") do (
- echo.>"第%%i组 张%%i.txt"
- )
- echo 已经在当前目录下建立要改名的演示文件
- pause
- echo.
- for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
- if "!a:~-1!"=="十" set a=!a:十=10!
- set a=!a: =!
- set a=!a:二十=2!
- set a=!a:一=1!
- set a=!a:二=2!
- set a=!a:三=3!
- set a=!a:四=4!
- set a=!a:五=5!
- set a=!a:六=6!
- set a=!a:七=7!
- set a=!a:八=8!
- set a=!a:九=9!
- set a=!a:十=1!
- if "!a:~-1!"=="拾" set a=!a:拾=10!
- set a=!a:壹=1!
- set a=!a:贰=2!
- set a=!a:叁=3!
- set a=!a:肆=4!
- set a=!a:伍=5!
- set a=!a:陸=6!
- set a=!a:柒=7!
- set a=!a:捌=8!
- set a=!a:玖=9!
- set a=!a:拾=1!
- ren "%%i组%%j" "!a!%%~xi组 %%j"
- )
- pause
复制代码
作者: Batcher 时间: 2011-9-29 11:44
在顶楼给几个以零开始的文件名做例子吧
作者: BAT1 时间: 2011-9-29 12:18
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for %%i in (第一组,第二组,第三组) do (
- echo.>%%i.txt
- echo.>零%%i.txt
- )
- echo 已经在当前目录下建立要改名的演示文件
- pause>nul
- echo.
- for /f %%i in ('dir /b 零*.txt') do (
- set /p a=把%%i改成什么?
- ren "%~dp0%%i" "!a!".txt
- )
- echo 修改完闭!
- 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替换- @echo off&setlocal ENABLEDELAYEDEXPANSION
- for /f "delims=" %%i in ('dir /b') do (set a=%%~ni
- set a=!a:一=1!
- set a=!a:二=2!
- set a=!a:十=1!
- echo !a!%%~xi
- )
- 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 编辑
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for %%i in ("第一组 张三","第二组 李四","第三组 王五","第十二组 赵六","第二十五组 王八蛋") do (
- echo.>%%i.txt
- )
- echo 已经在当前目录下建立要改名的演示文件
- pause
- echo.
- for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
- set a=!a:二十=2!
- set a=!a:一=1!
- set a=!a:二=2!
- set a=!a:三=3!
- set a=!a:四=4!
- set a=!a:五=5!
- set a=!a:六=6!
- set a=!a:七=7!
- set a=!a:八=8!
- set a=!a:九=9!
- set a=!a:十=1!
- ren "%%i组%%j" "!a!%%~xi组%%j"
- )
- 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
感谢帮助, 不过想到一个问题.
空格仅处理第与组之间的空格, 但是不处理组之后的.
如果这里我真的使用下面的重命名方式, 会对已有空格的文件名增加更多的空格.- ren "%%i组%%j" "!a!%%~xi组 %%j"
复制代码
另外还有一个问题, 批处理中的 set a=!a:十=1! 是把十替换成1, 第十组以后的可以解决, 但是如果遇到第十组的时候怎么办? 但是成了第一组了.
作者: BAT1 时间: 2011-10-3 13:27
回复 13# hkmhd - @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for %%i in ("一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五") do (
- echo.>"第%%i组 张%%i.txt"
- )
- echo 已经在当前目录下建立要改名的演示文件
- pause
- echo.
- for /f "tokens=1,2 delims=组" %%i in ('dir /b *.txt') do (set a=%%~ni
- if "!a:~-1!"=="十" set a=!a:十=10!
- set a=!a: =!
- set a=!a:二十=2!
- set a=!a:一=1!
- set a=!a:二=2!
- set a=!a:三=3!
- set a=!a:四=4!
- set a=!a:五=5!
- set a=!a:六=6!
- set a=!a:七=7!
- set a=!a:八=8!
- set a=!a:九=9!
- set a=!a:十=1!
- ren "%%i组%%j" "!a!%%~xi组 %%j"
- )
- pause
复制代码
作者: hkmhd 时间: 2011-10-3 13:47
十分感谢 Bat1 的帮助
以后学生上交的作业就不用自己动手重命名了.
这个问题一直很困扰
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |