中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 06:54
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » 求助:正则表达式批量修改文件名(高手帮我)
可打印版本  4,027 / 17
第1楼 hotldl007 发表于 2006-09-27 07:17
初级用户 发帖 11 积分 34 来自 上海
求助:正则表达式批量修改文件名(高手帮我)
如 c:\movie 文件夹下,有许多rmvb格式的电影文件,命名很复杂,如 cb***01***.rmvb,cb**02****.rmvb,dd****03*.rmvb等。 如何一次批量修改以cb开头的文件,再用正则表达式取到中间的数字字段,使新的名称为: cb_01.rmvb,cb_02.rmvb,cb_03.rmvb 呢?
谢谢!!
第2楼 namejm 发表于 2006-09-27 09:21
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  如果命名很复杂而又没什么规律可寻的话,光凭正则表达式来探测数字的字段,是非常不容易的。请把文件名的组成规律说的再详细一点。
第3楼 vkill 发表于 2006-09-27 09:29
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
我看是行的通的,因为命名是没有规律的
第4楼 redtek 发表于 2006-09-28 00:04
金牌会员 发帖 1,147 积分 2,902
最好把那些文件名重定向到一个文件,传上来大家看看~:)
第5楼 NaturalJ0 发表于 2006-09-28 04:24
银牌会员 发帖 533 积分 1,181


[ Last edited by NaturalJ0 on 2006-9-28 at 05:08 ]
第6楼 namejm 发表于 2006-09-28 04:59
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  NaturalJ0 的代码通过探测文件名的每一个字符,只提取其中的数字的方法达到了对含有数字的文件名进行改名的目的,是个通行方案,非常不错。

[ Last edited by namejm on 2006-9-28 at 05:02 ]
第7楼 hotldl007 发表于 2006-09-28 10:05
初级用户 发帖 11 积分 34 来自 上海
五楼的 NaturalJ0
伟人! 太佩服了! 五体投地!
我决定先把代码读懂了,再去试试先!
第8楼 pengfei 发表于 2006-09-28 22:40
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
5楼的代码写得不错, 但我电脑上执行未成功, 我也用一个新的思路写了一段, 相信更能符合楼主的要求.

代码的执行原理是: 查找c:\movie目录下文件名为cb***01***.rmvb类似格式的文件. 提取其中的数字也就是01等, 并将该文件重命名为cb_01.rmvb的格式.

这就达到了文件名中数字不变, 只改变其格式的目的. 但会过滤掉除阿拉伯数字外的所有字符(如果要保留其他字符或字符串, 请在FOR语句中添加).

另外, 脚本会生成日志文件, 记录处理与未处理的文件总数, 并把未处理的文件写入文件列表. 这样整个代码的执行情况就一目了然了.

稍微修改其中的代码就可以重命名任何文件夹下各种类型的文件. 但是必须符合一定规律.

代码虽然经过测试未发现问题, 但也难免会出现错误, 请谨慎使用!


本段代码具有更大的灵活性, 楼主可以在FOR语句中加入需要匹配的字符或字符串, 这样在重命名文件时这些字符都将保留下来.

[ Last edited by pengfei on 2006-9-28 at 23:35 ]
第9楼 vkill 发表于 2006-09-28 22:44
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
要是楼主所说的文件名中有 cb*0*01***.rmvb,这样的文件名那?
第10楼 NaturalJ0 发表于 2006-09-28 22:47
银牌会员 发帖 533 积分 1,181
我写的那段不能处理所有情况。比如原来目录中就含有 (1) 这种文件的话,部分文件就有可能改名失败。你说的未成功是指错在这里吗?

[ Last edited by NaturalJ0 on 2006-9-28 at 22:48 ]
第11楼 pengfei 发表于 2006-09-28 22:57
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
Originally posted by he200377 at 2006-9-28 22:44:
要是楼主所说的文件名中有 cb*0*01***.rmvb,这样的文件名那?


如果是这样的文件名将会生命名为 cd_001.rmvb.

有可能出现重复, 但以后的出现提取到001这样的字符, 程序将会不作任何处理, 将未处理的文件写入文件列表.

不过以楼主的文件名规律来看, 应该可以正确处理所有文件. 将会重命名为cd_01.rmvb, cd_02.rmvb..., cd_n.rmvb
第12楼 pengfei 发表于 2006-09-28 22:59
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
Originally posted by NaturalJ0 at 2006-9-28 22:47:
我写的那段不能处理所有情况。比如原来目录中就含有 (1) 这种文件的话,部分文件就有可能改名失败。你说的未成功是指错在这里吗?

[ Last edited ...


我只是试运行了一下, 没有任何反应. 文件夹下的文件名为 cd-----01----.rmvb, cd-----02----.rmvb, cd-----03----.rmvb......
第13楼 NaturalJ0 发表于 2006-09-28 23:07
银牌会员 发帖 533 积分 1,181
的确不能成功,因为我处理的是 CB 开头的文件,你的是 CD 开头的文件。
第14楼 pengfei 发表于 2006-09-28 23:09
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
原来是我看错了, 那我那段代码也应该改成cb了...
第15楼 hotldl007 发表于 2006-09-30 06:57
初级用户 发帖 11 积分 34 来自 上海
多谢各位大哥,我是个新手,只看过一些肤浅的教材,看你们的代码发现有以下不明白的地方,请耐心教导,谢谢!
if not !number!==# ::这里的#是什么意思?
=^> ::什么意思?
if !firstchar! GEQ 0 ::GEO什么意思 还有LSS什么意思?
非常感谢这个论坛!如果觉得问得愚昧,先把我骂一遍再解答吧,^_^ ^_^
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023