中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 15:43
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]按要求实现批量改名(非一般的更名) 查看 6,146 回复 43
楼 主 [已解决]按要求实现批量改名(非一般的更名) 发表于 2007-07-31 11:19 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
如题: 就是说如果某个目录下有一些文件.比如,D盘根目录下File子目录下, 有一些DOC文件,同时有一个txt列表文件, 如file.txt。假如File目录下的文件是这些:
记事本.doc
文档.doc
女人花.doc
.......

file.txt文件里面对应的是这些doc更名后的文件名,如:
你好.doc
对不起.doc
不错.doc
........

其实更清楚一点就是有2栏文件名列表:
记事本.doc -〉 你好.doc
文档.doc -〉 对不起.doc
女人花.doc -〉 不错.doc
........

记事本.doc对应于你好.doc,女人花.doc对应于不错.doc, 其余以此类推.
当然对应的顺序事先已经给出,也就是原文件名和要求改的文件名是一一对应的。

现在希望能用批处理一次实现更名,请大家帮忙啊。

[ Last edited by frankkf on 2007-7-31 at 04:28 PM ]
2 发表于 2007-07-31 11:30 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
首先dir /b *.doc 出另外一个表
这就变成了对两个表的同步遍历的通用问题

我一般会用for /l进行遍历
然后在当中用for /f来取行

当然也可以直接for /f 遍历整个路径下的*.doc
然后在当中用变量计量行号
并用此变量到file.txt中取对应行

不过前提是保证这两个表的表项确实是一一对应的
否则你的恢复工作将会很麻烦
3 发表于 2007-07-31 11:42 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
如果现在*.doc文件遍历出来和file.txt中的顺序不一样,但是有另外一个name.txt文件,里面列出的*.doc文件顺序和file.txt中要更名的顺序是一一对应的
这样能否实现改名?
改的*.doc文件还是在File文件夹下
4 发表于 2007-07-31 11:45 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
按照我上面的说法当然是可以的
就只需要同步遍历两个表就可以了

当然,为了安全起见
最好不要把name.txt和file.txt放在File路径下
5 发表于 2007-07-31 11:49 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
按你说的这个怎么实现
能否帮忙写个代码
我对for /f这些还不是很熟
6 发表于 2007-07-31 12:04 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
事件关系,仅给出原型代码
未作实际测试
实际应用还需要自己完善和修改一下

批处理放在File上一级文件夹下
源文件名放在File上一级文件夹下的srcname.txt
目标文件名放在File上一级文件夹下的dstname.txt
先运行看一下显示结果是否符合预期
如果符合再去掉ren前面的echo正式改名

以下代码根据7楼的问题反馈进行修改


@echo off & setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1,1,10000) do (
set src=
set dst=
for /f "tokens=2* delims=:" %%s in ('findstr /n . srcname.txt ^| findstr /b %%i:') do set src=%%s
for /f "tokens=2* delims=:" %%s in ('findstr /n . dstname.txt ^| findstr /b %%i:') do set dst=%%s
if "!src!"=="" goto :eof
if "!dst!"=="" goto :eof
echo ren "File\!src!" "!dst!"
)


[ Last edited by qzwqzw on 2007-7-31 at 09:41 PM ]
7 发表于 2007-07-31 12:39 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
提示:%i delims= " was unexpected at this time
不知道是什么原因
8 发表于 2007-07-31 12:44 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
按照前面讲的
在File文件夹上一级文件夹下放置本批处理文件和srcname.txt,dstname.txt
File文件夹下有文件记事本.doc,文档.doc,女人花.doc等
9 发表于 2007-07-31 13:42 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
源文件和目标文件如果自己写的话为什么不写在一起?
RenList.txt:
记事本.doc 你好.doc
文档.doc 对不起.doc
女人花.doc 不错.doc

这样的话方便很多。。。
10 发表于 2007-07-31 13:45 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
原来对应的原文件名和目标文件名是在一个excel表格中的2列,
但是不知用批处理如何调用excel
所以想到用2个txt文件
如果用一个Renlist.txt不好识别

[ Last edited by frankkf on 2007-7-31 at 01:52 PM ]
11 发表于 2007-07-31 14:13 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线
VBS可以读取EXCEL。
12 发表于 2007-07-31 14:20 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
可是我vbs不会啊
刚开始学批处理
如果有可以用vbs实现这个也可以
13 发表于 2007-07-31 14:22 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线
原来对应的原文件名和目标文件名是在一个excel表格中的2列,说说是怎么个规律?
如:1,3,5...源文件名
2,4,6...目标文件名??
14 发表于 2007-07-31 14:26 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
学批处理,所以想到能否用批处理实现
感觉上实现这个应该可以
但具体怎么弄不清楚

所以在这里请教各位大侠了
15 发表于 2007-07-31 14:27 ·  新加坡 Verizon通讯公司UUNet互联点
初级用户
积分 88
发帖 43
注册 2007-05-30 22:09
19年会员
UID 89807
性别 男
状态 离线
就是这样,如下:
A B
记事本 你好
文档 对不起
女人花 不错
.... ....

差不多是这个样子

注意:文件的扩展名为doc,如果是在excel表格中则扩展名doc会去掉,
直接给出文件名。

[ Last edited by frankkf on 2007-7-31 at 02:38 PM ]
论坛跳转: