[翻]使用正则表达式查找和替换文件名

使用正则表达式对文件名执行查找与替换功能.


Sample image

介绍

这个程序的目的是让你可以正则表达式查找和替换文件名.起初你可能会觉得这是一件很陌生的事情.然而想像一样,你有一个装满文件的文件夹,它允许使用两种不同的命名规则----包含同样的信息,只是以不同的方向显示.如果你想把这些文件名标准化,那么你需要独立地修改每一个文件名.对成千成万个文件进行重命名非我所好,所以我写了这个程序通过文件名进行和替换.

使用这个程序

打开程序后,你可以选择要执行查询和替换操作的文件夹.在此项同时在它的子目录下进行查找.

查找和替换部分允许你输入你想要执行的查找和替换操作使用的正则表达式,在这里使用标准正则表达式的语法.如果你正在找一个工具来测试或者设计正则表达式,我很高兴地为您推荐Code Project上的 Expresso.

find(查找)文本框中,你同时会得到一个正则表达式选项的集合,如果没有任何东西时,推荐你把Compiled(编译?)状态打开,这将在很大程度上提高速度.

在运行正则表达式覆盖文件名之前,建议您以测试方式进行运行.这种方式将做除覆盖文件名之外的所有工作.这样您可以查看一下结果,并确认运行是否正确.不能使用此程序撤消对文件名的修改;我不想为把数千个文件名改成毫无意义的垃圾负责.

Testing the regular expression.
测试正则表达式

在文件菜单下面,你将可以有”保存”和”载入”工程的功能.这只是把所有文本框和复选框的值保存到XML文件中,以供日后装载.这就避免了你以后要回忆起或者重新写一个非常复杂的正则表达式的情况.

它是如何工作的

这个程序的代码是令人难以置信地简单,根本没有什么非常复杂的地方.所以实际对文件名的处理都在frmReplace. ReplaceFiles方法执行了所有的操作,它得到了一个文件列表,并且迭代地对每一个进行文件,检查是否与正则表达式匹配.如果匹配,则作为写的一项写入到列表控件中,并且对文件进行重命名.

 
  
foreach  ( string  file  in  files)
... {
    
// move the progress bar along
    pbReplace.Value = ++i;

    
// find just the file name.. no need to replace anything in the path
    string name = Path.GetFileName(file);

    
// does it match the expression?
    if (rex.IsMatch(name))
    
...{
        
// find out the new name after replacement
        string newName = rex.Replace(name, replace);

        
// the path that this came from
        string path = Path.GetDirectoryName(file);

        
// add an item to the list showing the replacement
        lstReplacements.Items.Add(
            path 
+ Path.DirectorySeparatorChar + name + " -> " + 
            path 
+ Path.DirectorySeparatorChar + newName);

        
// 只是试运行时不替换文件名
        if (!testOnly)
        
...{
            
// 替换文件名
            File.Move(path + Path.DirectorySeparatorChar + name, 
                path 
+ Path.DirectorySeparatorChar + newName);
        }

    }

}

结束语

这是一篇非常短小的文章.事实上,一个用大约60行代码就完成所有功能的程序也没有太多可探讨的.希望您觉得这个程序有用.

修改日志

2007110, 第一版.

原文地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值