中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 21:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 文件名中的中文序数批处理问题 查看 775 回复 1
楼 主 文件名中的中文序数批处理问题 发表于 2007-09-16 00:01 ·  中国 江西 九江 电信
新手上路
积分 6
发帖 3
注册 2007-09-15 22:03
18年会员
UID 97493
性别 男
状态 离线
这个问题需要解释一下:
txt文件名,很多时候是这样的:

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

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


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

希望有高手可以帮忙解决这个修改文件名的问题。
2 发表于 2007-09-19 13:13 ·  中国 陕西 渭南 电信
初级用户
★★
积分 186
发帖 92
注册 2007-03-27 08:20
19年会员
UID 83047
性别 男
状态 离线
昨天修改了一个批处理,现在给仅供参考,可以把 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, 下载次数: 7)
论坛跳转: