最近喜欢上看一些综艺节目,比如《天天向上》什么的,而且喜欢下载下来看,呵呵。
我一般是在优酷的客户端上下载,可这上面的节目视频文件命名却让我很头疼。它里面的很多节目名没有按发布的时间先后在前面加一个序号;或名字中包含了日期,却放在了后面。下载下来,文件按文件名排序,从前到后根本就是时间顺序。这样我要按时间顺序从前往后看,或都要盾某一期的节目,就得一个一个地、仔细地扫描整个存储目录,觉得十分的不便,尤其是文件数量特别多的时候!(ps:有序是多么的重要的啊!)
上个图吧:
就上图中的情况,要是中间的表示时间的片段“130130”能移到文件名的前面就好了,想了想觉得网上现有的一些改名工具,好像都没有这样的比较偏的功能,它们一般都加前后缀什么的,与我的需要不符。想想咱也也是个半吊子程序员,这点小事还是能,自己动手,丰衣足食吧!
先首:分析一下可行性吧。
看上图中所有的文件名,它都遵守一个格式。如:不可思议的旅程(11) 130130 标清.flv,它分成四段,先是一个内容名:不可思议的旅程(11),接着一个空格之前是时间:130130,再接着一个空格之后是个表示视频大小的词:标清,最后就是一个文件的格式后缀了:.flv。既然是样就好办了,我只要将一个文件名的这是段字符串解析出来,将表示时间的那放到最后前,其它的不变,这样一重命名不就成了吗。
按下这个思路,遍历整个目录,应该就成了吧!
需要的类库
主要是文件和目录操作相关的类,我这里用的有:FileInfo类、DirectoryInfo类、
代码:
下面是我在vs下建的一个控制台项目的主文件,注这个类只针对,我上面说的情况,所写的硬编码。要改的话也方便的。
/*
* 描述: 批量些文件名
* 作者: AnYuanLzh
* 日期: 2013/12/05
*/
using System;
using System.IO;
namespace BatchAlterFinename
{
class Program
{
// 指定一个目录
static public string directoryPath = @"F:\Youku Files\download\有多远走多远 2013";
static void Main(string[] args)
{
Console.WriteLine("开始运行,本程序...");
// 判断给定的目录是否存在
if (!Directory.Exists(directoryPath))
{
Console.WriteLine("给定的目录不存在");
Console.WriteLine("程序结束,按任意键退出本程序结束...");
Console.ReadKey();
return;
}
// 返回当前按下目录下的文件列表
DirectoryInfo di = new DirectoryInfo(directoryPath);
FileInfo[] files = di.GetFiles();
// 遍历这个目录
int count = 0;
foreach (FileInfo f in files)
{
// 获取一个文件的名字,并解析这个名字。
string fileName = f.Name;
// 方法1
/*// 解析这个名字,以空格符来拆分文件名:
// 如: “不可思议的旅程(11) 130130 标清.flv” ==> “不可思议的旅程(11)”、“130130”、“标清.flv”
string[] nameFragments = fileName.Split(' ');
if (nameFragments.Length == 3)
{
count++;
// 重命名,将第2段前置
string newFileName = nameFragments[1] + " " + nameFragments[0] + " " + nameFragments[2];
// 将第3段前置
//string newFileName = nameFragments[2] + " " + nameFragments[0] + " " + nameFragments[1] + " " + nameFragments[3];
// 将第4段前置
//string newFileName = nameFragments[3] + " " + nameFragments[0] + " " + nameFragments[1] + " " + nameFragments[2] + " " + nameFragments[4];
f.MoveTo(Path.Combine(directoryPath, newFileName));
}*/
// 方法2
// 解析这个名字,以空格符和'.'字符来拆分文件名:
// 如: “不可思议的旅程(11) 130130 标清.flv” ==> “不可思议的旅程(11)”、“130130”、“标清"、“flv”
string[] nameFragments = fileName.Split(' ','.');
if (nameFragments.Length >= 4)
{
count++;
// 重命名,将倒数第3段前置
int dateIndex = nameFragments.Length - 3;
string newFileName = nameFragments[dateIndex];
for (int i = 0; i < nameFragments.Length; i++)
{
if (i == dateIndex) continue;
if (i != nameFragments.Length - 1)
{
newFileName += " " + nameFragments[i];
}
else
{
newFileName += "." + nameFragments[i];
}
}
f.MoveTo(Path.Combine(directoryPath, newFileName));
}
}
Console.WriteLine("已经成因的修改了{0}个文件名", count);
Console.WriteLine("程序结束,按任意键退出本程序结束...");
Console.ReadKey();
}
}
}
测试通过,有图有真相:
呵呵,这样看起就方便多了。到这里,就算完了,谢谢浏览!
(如有转载,请注明出处:AnYuanLzh:http://blog.csdn.net/anyuanlzh/article/details/17137041)