中国DOS联盟论坛

中国DOS联盟

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

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

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





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

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

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 2 楼』:  

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

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

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

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

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 3 楼』:  

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

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

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 4 楼』:  

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

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

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 5 楼』:  

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

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

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 6 楼』:  

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

批处理放在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 楼』:  

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

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 8 楼』:  

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

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





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

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

这样的话方便很多。。。

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 10 楼』:  

原来对应的原文件名和目标文件名是在一个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 楼』:  

VBS可以读取EXCEL。

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 12 楼』:  

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

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




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 13 楼』:  

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

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 14 楼』:  

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

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

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





积分 88
发帖 43
注册 2007-5-30
状态 离线
『第 15 楼』:  

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

差不多是这个样子

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

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

2007-7-31 14:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: