![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 20:20 |
共 48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 文件名中的中文序数批处理问题 |
| 可打印版本 773 / 1 |
| 第1楼 linnu | 发表于 2007-09-16 00:01 |
| 新手上路 发帖 3 积分 6 | |
|
文件名中的中文序数批处理问题 这个问题需要解释一下:
txt文件名,很多时候是这样的: “第一回引言”。。。。“第二十三回真相”。。。。“第一百零二回尾声”等等。 现在想把文件名中的 “第一”改为“第001”, 第二十三 改为第023 第一百零二 改为 第102 文件名的其他部分不变。 这个问题,在看电子书的时候,没有批处理,手动来修改,确实很烦恼,当然,可以直接改为001.txt,002.txt 。。。。不过总觉得美中不足。 希望有高手可以帮忙解决这个修改文件名的问题。 |
|
| 第2楼 lp1129 | 发表于 2007-09-19 13:13 |
| 初级用户 发帖 92 积分 186 | |
|
昨天修改了一个批处理,现在给仅供参考,可以把 D:\1 的第一回等文件改名为第1回
@echo off setlocal enabledelayedexpansion FOR /F "tokens=1,2 delims=回" %%x in ('dir d:\1\第*回* /a-d /b') do ( set aaaa=%%x set aaaa=!aaaa:第=! set bbbb=%%y echo !aaaa!|findstr >nul||call :1111 ) echo 成功改名 pause exit :1111 :: code by youxi01 2007-1-3 CMD@XP :: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=26288 :: 说明:只能处理1亿以内的数据 :: LP1129修改代码为汉字小写转阿拉伯数字,原文为汉字大写转阿拉伯数字 set a= set Res= set Res1= set Res2= for /l %%z in (0 2 8) do ( set num1_%%z= set num2_%%z= ) set str=!aaaa! if %str%==十一 set Res=11&&goto last if %str%==十二 set Res=12&&goto last if %str%==十三 set Res=13&&goto last if %str%==十四 set Res=14&&goto last if %str%==十五 set Res=15&&goto last if %str%==十六 set Res=16&&goto last if %str%==十七 set Res=17&&goto last if %str%==十八 set Res=18&&goto last if %str%==十九 set Res=19&&goto last set /a 千=1000,百=100,十=10,个=1 for %%i in (一 二 三 四 五 六 七 八 九) do ( set/a a+=1 call set str=%%str:%%i=!a!%%) for /f "tokens=1* delims=点" %%i in ("%str%") do set rnd=%%i&set dec=%%j for /f "tokens=1* delims=万" %%i in ("%rnd:零=%") do ( if "%%j"=="" ( set/a num1_=0 call :test %%i 2 ) else (call :test %%i 1 &call :test %%j 2)) for /f "tokens=2 delims==" %%i in ('set num1_') do set /a Res1+=%%i for /f "tokens=2 delims==" %%i in ('set num2_') do set /a Res2+=%%i set /a Res=%Res1%*10000+%Res2% :last ren d:\1\第!aaaa!回!bbbb! 第!Res!回!bbbb! echo d:\1\第!aaaa!回!bbbb!改名为:第!Res!回!bbbb! goto :eof :test set tmp=%1 for /l %%i in (0 2 8) do ( set tmp_=!tmp:~%%i,2! if not "!tmp_!"=="" ( set tmp1=!tmp_:~0,1! set tmp2=!tmp_:~1,1! if "!tmp2!"=="" set tmp2=个 call set /a num%2_%%i=!tmp1!*%%!tmp2!%%) else goto :eof) 附件 更换第一回文件名为第1回.txt (1.84 KiB) |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |