中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 文件名中的中文序数批处理问题
作者:
标题: 文件名中的中文序数批处理问题 上一主题 | 下一主题
linnu
新手上路





积分 6
发帖 3
注册 2007-9-15
状态 离线
『楼 主』:  文件名中的中文序数批处理问题

这个问题需要解释一下:
txt文件名,很多时候是这样的:

“第一回引言”。。。。“第二十三回真相”。。。。“第一百零二回尾声”等等。

现在想把文件名中的
“第一”改为“第001”,
第二十三 改为第023
第一百零二 改为 第102
文件名的其他部分不变。


这个问题,在看电子书的时候,没有批处理,手动来修改,确实很烦恼,当然,可以直接改为001.txt,002.txt 。。。。不过总觉得美中不足。

希望有高手可以帮忙解决这个修改文件名的问题。

2007-9-16 00:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lp1129
初级用户





积分 186
发帖 92
注册 2007-3-27
状态 离线
『第 2 楼』:  

昨天修改了一个批处理,现在给仅供参考,可以把 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 [1234567890] >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: 更换第一回文件名为第1回.txt (2007-9-19 13:13, 1.84 K,下载次数: 7)
2007-9-19 13:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: