65.9K
CodeProject 正在变化。 阅读更多。
Home

增强的文件重命名实用程序

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.24/5 (13投票s)

2005年1月3日

2分钟阅读

viewsIcon

46991

downloadIcon

319

增强型文件重命名工具,旨在改进MS DOS提供的“ren”命令。

Sample Image - FileUtil.jpg

引言

每次从数码相机下载图片时,它们都命名为Image_001.jpg、Image_002.jpg、Image_003.jpg...依此类推。我想去掉文件名中的“Image_”。我尝试使用MS DOS中的“REN”或“RENAME”命令。但是,我很快发现该命令不允许我从文件名中删除字符。它可以让我批量更改文件名或批量增加字符,但不能批量删除几个字符。因此,我想编写这个非常小的命令行工具来将文件名重命名为我们想要的任何名称。这个项目还处于初始阶段,因此缺少一些功能。但我将提供源代码供您使用。

描述

该项目仅包含一个用于重命名文件的通用函数、一个用于理解传递的输入参数的函数以及一个用于显示帮助信息的函数。

主函数

主函数将验证输入参数是否为nullLength。如果它们不正确,将显示帮助信息。如果它们正确,则将调用解析参数的函数。
static void Main(string[] args)
{
    if ((args != null) && (args.Length > 0)) 
    { 
        DoStuff(args);
    } 
    else 
    { 
        WriteHelp(); 
    } 
} 

解析参数

函数DoStuff()将接收输入参数,解析它们,然后调用执行重命名的工作函数。此函数首先确保传递了正确的参数。

if (((args[0].ToString().ToLower() == "ren") 
                    || (args[0].ToString().ToLower() == "rename"))
                    && (args.Length >= 3))

如果参数正确,则将调用工作函数 - renameFiles(...)

bool ret = renameFiles(workingFolder, findVal, replaceVal);

否则,将调用显示帮助信息的函数 - WriteHelp()

bool ret = renameFiles(workingFolder, findVal, replaceVal);

重命名文件

函数renameFiles(...)接收文件夹路径、搜索string和替换string作为输入。然后它将使用FILEINFO对象来重命名文件。

private static bool renameFiles(string folderPath, 
                           string findString, string replaceWith) 
{
    bool ret = false;
    try
    {
        DirectoryInfo di = new DirectoryInfo(folderPath);
        string destFileName = "";
        foreach (FileInfo fi in di.GetFiles())
        {
            if (fi.Name.ToLower().IndexOf(findString) > -1 )
            {
                destFileName = fi.DirectoryName + "\\" + 
                fi.Name.ToLower().Replace(findString, replaceWith);
                File.Move(fi.FullName, destFileName);
            }
        }
        ret = true;
    }
    catch(System.Exception ex)
    {
        throw new ApplicationException("Error in renameFiles",ex);
    }
    return ret;
}

结论

我开始这个项目是为了添加对DOS中找到的命令的增强功能。如果您有任何想法,请告诉我。我将尝试在下一个版本中加入它。

更新 (2005/01/14)

我已经更新了代码,使路径现在是最后一个参数并且是可选的。感谢Myrddin Emrys提出的建议。

© . All rights reserved.