中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]按要求实现批量改名(非一般的更名)
作者:
标题: [已解决]按要求实现批量改名(非一般的更名) 上一主题 | 下一主题
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『楼 主』:  [已解决]按要求实现批量改名(非一般的更名) 使用 LLM 解释/回答一下

如题: 就是说如果某个目录下有一些文件.比如,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 ]


2007-7-31 11:19
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

首先dir /b *.doc 出另外一个表
这就变成了对两个表的同步遍历的通用问题

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

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

不过前提是保证这两个表的表项确实是一一对应的
否则你的恢复工作将会很麻烦


2007-7-31 11:30
查看资料  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

如果现在*.doc文件遍历出来和file.txt中的顺序不一样,但是有另外一个name.txt文件,里面列出的*.doc文件顺序和file.txt中要更名的顺序是一一对应的
这样能否实现改名?
改的*.doc文件还是在File文件夹下


2007-7-31 11:42
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

按照我上面的说法当然是可以的
就只需要同步遍历两个表就可以了

当然,为了安全起见
最好不要把name.txt和file.txt放在File路径下


2007-7-31 11:45
查看资料  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

按你说的这个怎么实现
能否帮忙写个代码
我对for /f这些还不是很熟


2007-7-31 11:49
查看资料  发短消息  网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

事件关系,仅给出原型代码
未作实际测试
实际应用还需要自己完善和修改一下

批处理放在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 ]


2007-7-31 12:04
查看资料  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

提示:%i delims= " was unexpected at this time
不知道是什么原因


2007-7-31 12:39
查看资料  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

按照前面讲的
在File文件夹上一级文件夹下放置本批处理文件和srcname.txt,dstname.txt
File文件夹下有文件记事本.doc,文档.doc,女人花.doc等


2007-7-31 12:44
查看资料  发短消息  网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

源文件和目标文件如果自己写的话为什么不写在一起?
RenList.txt:
记事本.doc 你好.doc
文档.doc 对不起.doc
女人花.doc 不错.doc

这样的话方便很多。。。


2007-7-31 13:42
查看资料  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

原来对应的原文件名和目标文件名是在一个excel表格中的2列,
但是不知用批处理如何调用excel
所以想到用2个txt文件
如果用一个Renlist.txt不好识别

Last edited by frankkf on 2007-7-31 at 01:52 PM ]


2007-7-31 13:45
查看资料  发短消息  网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

VBS可以读取EXCEL。


2007-7-31 14:13
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

可是我vbs不会啊
刚开始学批处理
如果有可以用vbs实现这个也可以


2007-7-31 14:20
查看资料  发短消息  网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

原来对应的原文件名和目标文件名是在一个excel表格中的2列,说说是怎么个规律?
如:1,3,5...源文件名
2,4,6...目标文件名??


2007-7-31 14:22
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

学批处理,所以想到能否用批处理实现
感觉上实现这个应该可以
但具体怎么弄不清楚

所以在这里请教各位大侠了


2007-7-31 14:26
查看资料  发短消息  网志   编辑帖子  回复  引用回复
frankkf
初级用户





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 15 楼』:   使用 LLM 解释/回答一下

就是这样,如下:
A B
记事本 你好
文档 对不起
女人花 不错
.... ....

差不多是这个样子

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

Last edited by frankkf on 2007-7-31 at 02:38 PM ]


2007-7-31 14:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: