正则表达式案例一则:结合目录输出命令批量改名

标签: SuperMemo学习 | 发表时间:2011-08-30 08:32 | 作者:舍得 Frankz
出处:http://blog.sina.com.cn/learningpower

这是舍得在实际工作中碰到的一个案例,整个操作过程非常简单,用到三项技术,一是使用dir输出目录,二是用正则表达式进行处理,三是批处理命令。
在实际操作中,有时我们或者可以用批量改名的工具来完成文件批量重命名这一任务,但对于本例来说,由于相对比较复杂,还是用舍得的方法处理一下更方便一些。
通过本例可以让我们重温一下正则表达式的使用技巧。
先来看看我们要完成的任务。舍得的某个文件夹里有这样的一些文件,文件名格式极有规律,是“字母“+”-”+”数字”+“-”+“其它内容”组成的,如:fut-019-e1.txt,我们要将它改为”数字“+”-”+“字母”+“-”+“其它内容”。
下面开始讲解实际操作。

第一步:用dir命令输出目录
进入dos界面(这项操作不会的童鞋请自行股沟一下)并转到所要操作的文件夹下,然后输入命令:dir > e.bat
dir是从dos时代就有的目录操作命令,它的历史比我们绝大多数童鞋的年龄还大,dir后面跟着的这个”>“非常关键,用它来告诉系统,请把当前 文件夹下的文件和文件夹名输出到”e.bat”这个文件。bat文件即批处理文件,它可以直接使用文本编辑软件进行编辑,并可以直接执行其中的dos命 令。
输出之后的结果如下面这个文件所示:
e.bat (10.36 KB, 下载次数: 0)

第二步:使用正则表达式进行处理
得到的文件包含一些无用的内容,需要先清理一下,仅保留每行一个文件名。
然后开始用正则表达式将每行的文件名替换为如下的格式:

  1. rename fut-019-e1.txt 019-fut-e1.txt

复制代码

rename(或ren)是重命名命令,后面跟着两个文件名,意思是将前一个文件名改为后一个文件名。
通过分析其中的规律,我们可以用”\w+”来表示连续字母,用”\d+”来表示连续数字,那么这个正则表达式就很好写了:

  1. 查找:(\w+-)(\d+-)(.*?$)
  2. 替换为:rename \1\2\3 \2\1\3

复制代码

前一个括号内代表”fut-“,后一个括号内代表”019-“,第三个括号则代表剩余的内容。
在替换栏内,加上dos 命令rename,注意别忘了后面的空格,\1\2\3的作用是将文件名原封不动地写回去,而\2\1\3则巧妙地将第一个括号和第二个括号换位,这个换位的技巧是正则表达式中最有用的技巧之一。

第三步:运行批处理文件
处理完之后,直接执行这个批处理命令,文件改名工作就顺利完成了!
最后处理完成的文件如下:
e.bat (7.39 KB, 下载次数: 0)

小结:

正则表达式的功能是非常强大的,用它可以大大提高我们日常工作的效率。虽然现在新版的转换精灵制作课程的功能非常强大,但大家若能掌握正则表达式,就能用它处理更多优质的学习素材,供转换精灵制作之需。有兴趣的童鞋不妨好好研究一下正则表达式的技巧。
如果将本例的rename命令换成copy,并对正则表达式稍作改造,就可以用来做一些像”从语音库里复制mp3“这样的任务。
假如你对这里讲的正则表达式知识还是很陌生,建议阅读一下舍得写的正则表达式实用教程,那篇文章讲述了正则表达式最基础的技术。

相关 [表达式 结合 目录] 推荐:

正则表达式案例一则:结合目录输出命令批量改名

- Frankz - 学习力就是竞争力
这是舍得在实际工作中碰到的一个案例,整个操作过程非常简单,用到三项技术,一是使用dir输出目录,二是用正则表达式进行处理,三是批处理命令. 在实际操作中,有时我们或者可以用批量改名的工具来完成文件批量重命名这一任务,但对于本例来说,由于相对比较复杂,还是用舍得的方法处理一下更方便一些. 通过本例可以让我们重温一下正则表达式的使用技巧.

正则表达式

- - CSDN博客推荐文章
    正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征. 比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征.     正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址.

新正则表达式

- Bloger - 博客园-首页原创精华区
很多网站需要将好的会员号留着,或用于日后的盈利. 实现方法不是本文讨论范围,本文仅列出用于检测靓号类型的一些正则.   靓号检测:主要可以检测连号(正连 12345、倒连65432)、AABB号、手机号码、日期号(生日号、年度号)、ABBCABB号,3位以上重复号. 更多类型号码检测可以根据以下表达式改造.

检查素数的正则表达式

- Wesley - 中文热文榜|最新
hawk 在 GoogleReader 说. 还有 ffan, football, 推荐,查看全部 33 个推荐 34 次分享. 酷壳 - CoolShell.cn发表于2010-07-23 08:22:27. 一般来说,我们会使用正规表达式来做字符串匹配,今天在网上浏览的时候,看到了有人用正则表达式来检查一个数字是否为素数(质数),让我非常感兴趣,这个正则表达式如入所示:.

Spring笔记 - Spring Expression Language (SpEL表达式)

- - CSDN博客架构设计推荐文章
数字5       . 联合方式  . 浮点型      .

[Java 8] Lambda 表达式实例

- - Java - 编程语言 - ITeye博客
Java 8 中的 Lambda 表达式,允许将函数作为形参传递给另外的函数. 为了更好地理解,我们用实例的方式来演示如何使用 Lambda 表达式. 1、Lambda 表达式 Hello World. 这是一个最简单的 Lambda 表达式的例子. 首先在 main 方法的上面声明了一个接口 HelloWorld,在 main 方法中实现了这个接口,随后调用了接口的唯一方法.

vim中使用正则表达式

- - CSDN博客系统运维推荐文章
使用正则表达式的命令最常见的就是   / (搜索)命令. 另一个很有用的命令就是  :s(替换)命令,将第一个//之间的正则表达式替换成第二个//之间的字符串. :s/正则表达式/替换字符串/选项. 在学习正则表达式时可以利用  / 命令来练习. 元字符是具有特殊意义的字符. 使用元字符可以表达 任意字符、 行首、 行 尾、 某几个字符等意义.

Lambda表达式现状分析

- - InfoQ cn
距明年Java 8发布还有不到一年时间,Brian Goetz发布了最新的 Lambda表达式现状分析,涵盖了Java集合API的改进. Java 8最受期待的特性之一是引入了 Lambda表达式,Java集合API对它的重点支持是确保该类库被广泛使用的关键所在. 如果你不熟悉Lambda表达式的语法,请查看先前的一篇文章 Lambda表达式现状分析以及之前InfoQ的相关报道,以便了解该语法的详细内容.

Java8集合中的Lambda表达式

- - 四火的唠叨
文章系本人原创,转载请保持完整性并注明出自 《四火的唠叨》. 本文翻译自《 Java 8 Explained: Applying Lambdas to Java Collections》. Lambdas表达式是Java 8的主题,在Java平台上我们期待了很久. 但是,如果如果我们不在集合中使用它的话,就损失了很大价值.