一个批量更改文件名的Python脚本

本程序要解决的需求是这样的:

比如有一堆用随机字符串命名的文件,需要改成形如:a001.xxx, a002.xxx ...
或是一堆形如:a1.xxx, a2.xxx .... a100.xxx,需要改成:a001.xxx, a002.xxx ... a100.xxx
又或者是一堆长短不一的文件名,需要在前/后面加一个前后缀什么的……

程序的用法如下:

renpat.py [-R] [-T] dir srcpattern destpattern
        -R : 包括子目录
        -T : 仅测试并显示,但不执行改名操作
        srcpattern : 使用正则表达式匹配源文件名,用括号提取所需要的部分,注意“.”等字符需要用“\”转义
        destpattern : 使用宏替换构造目标文件名,$[1-9]对应源文件名中提取出来的部分,$c为内置计数器,可以用%对目标内容进行格式化,只支持s和d两种类型
        例1 : renpat.py . (.*?)\.jpg prefix$1.jpg -- aa.jpg => prefixaa.jpg
        例2 : renpat.py . (.*?)\.jpg $1%($c)02d.jpg -- aa.jpg => aa00.jpg
        例3 : renpat.py . (.*?)([0-9]*?)\.jpg $1%($2)03d.jpg --aa11.jpg => aa011.jpg

嗯,我承认这个东东是有点Geek,非专业人士还是不推荐了。但是对于专业人士来说还是蛮好用的。^O^

补充:感谢令狐帮助发现并修正了一个BUG,今天14:30之前下载的TX请麻烦重新下载一下。

python源程序,基于GPL V2发布(下载:2kBytes,Revision:061230)。

注意:因为程序可能不断更新修正,下载到的程序可能是与本文说明不附的新版本,请注意Trackback的反馈链接。


很不错,多说一句,win下文件名中的空格要用双引号而非\,
renpat.py . (.?)" “(.?)\.jpg $1_$2.jpg
不过这样一次只能处理一个空格就是了

gerry at 2009-01-09T23:10:00+08:00

发现一个问题,不能匹配以特定字符开头的文件名,我用的是行首标记 ^
比如匹配renpat.py . ^a(.*?)\.jpg $1.jpg , 会在中间位置截断

gerry at 2009-01-10T01:43:00+08:00

– 《Mental Studio-[小工具]批量修改文件名(Ver 2.0)》 at 2009-01-12T15:54:00+08:00