如何使用匹配的字符串递归重命名文件夹名和文件名

Ganesh Kamath - 'Code Frenzy'

我的应用程序在以下目录结构中生成文件

FolderMatchALeve1
-FileMatchALevel2_A.cs
-FileMatchALevel2_B.cs
-FolderMatchALevel2
--FileMatchALevel3_A.txt
--FileMatchALevel3_B.txt

我要寻找一种方式来命名的目录结构,具有以下变迁- “抹茶”“AMatch”

所以执行程序后的结果应该是这样的:

FolderAMatchLeve1
-FileAMatchLevel2_A.cs
-FileAMatchLevel2_B.cs
-FolderAMatchLevel2
--FileAMatchLevel3_A.txt
--FileAMatchLevel3_B.txt

到目前为止,在我寻求解决方案的过程中,我一直没有成功。请帮我找到解决方案。

由于在我们公司维护遗留产品,我需要在 C# Winforms 中使用此解决方案。

编辑:

附加信息

  1. 每次有人运行我们的程序时,我都需要进行此更改。

  2. 我需要对 3350 个文件执行此操作

问题总结:

简而言之,在递归(或迭代)遍历每个目录时,我希望它重命名名称与匹配字符串匹配的文件,然后在出来后重命名目录,如果它的名称也与字符串匹配(对于所有部分或完全匹配)。

鲁福爵士

快速和肮脏(但有效)

public static class DirectoryRenamer
{
    public static void RenameDirectoryTree( string path, Func<string, string> renamingRule )
    {
        var di = new DirectoryInfo( path );
        RenameDirectoryTree( di, renamingRule );
    }

    public static void RenameDirectoryTree( DirectoryInfo directory, Func<string, string> renamingRule )
    {
        InternalRenameDirectoryTree( directory, renamingRule );

        var currentName = directory.Name;
        var newName = renamingRule( currentName );
        if ( currentName != newName )
        {
            var newDirname = Path.Combine( directory.Parent.FullName, newName );
            directory.MoveTo( newDirname );
        }
    }

    static void InternalRenameDirectoryTree( DirectoryInfo di, Func<string, string> renamingRule )
    {
        foreach ( var item in di.GetFileSystemInfos() )
        {
            var subdir = item as DirectoryInfo;
            if ( subdir != null )
            {
                InternalRenameDirectoryTree( subdir, renamingRule );

                var currentName = subdir.Name;
                var newName = renamingRule( currentName );
                if ( currentName != newName )
                {
                    var newDirname = Path.Combine( subdir.Parent.FullName, newName );
                    subdir.MoveTo( newDirname );
                }
            }

            var file = item as FileInfo;
            if ( file != null )
            {
                var currentName = Path.GetFileNameWithoutExtension( file.Name );
                var newName = renamingRule( currentName );
                if ( currentName != newName )
                {
                    var newFilename = Path.Combine( file.DirectoryName, newName + file.Extension );
                    file.MoveTo( newFilename );
                }
            }
        }
    }
}

示例用法

class Program
{
    static void Main( string[] args )
    {
        DirectoryRenamer.RenameDirectoryTree( 
            @"C:\Test\FolderMatchALevel", 
            name => name.Replace( "MatchA", "AMatch" ) );
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试重命名文件夹中的文件(基于文件名中的字符串)

如何匹配文件名中的字符串并根据字符串重命名文件?

根据部分文件夹中的部分文件名匹配,重命名文件名的子字符串

根据同一文件夹中的部分文件名匹配重命名文件名的子字符串

如何使用 Ubuntu“重命名”工具替换目录名和文件名中的字符串?

如何重命名文件夹中的文件名?

如何使用哈希中的字符串值重命名文件名?

如何在所有文件夹和文件名中替换字符串

批量重命名URL编码的文件名和文件夹路径

使用查找和重命名将用户定义的字符串递归添加到所有文件和文件夹

文件夹或文件名中的Glob模式匹配字符串

重命名文件夹中的文件名

从文件名重命名文件夹 [脚本]

如何将文件重命名为文件名中的子字符串?

重命名文件名末尾带有$'\ r的文件(包括文件夹中的递归文件),而无需使用重命名

使用从文件名中提取的字符串重命名文件

使用sed从文件名中移动字符串或使用重命名将其重命名

使用bash shell映射json字符串中文件夹中的文件名

如何重命名多个文件名包含子文件夹?

如何根据文件夹名称重命名文件名?

在 PowerShell 4.0 中使用文件名重命名文件夹

linux递归重命名文件名

如何使用“:”和文件名中的递增数字复制和重命名文件

我需要找到与字符串lastline匹配的文件的文件路径和文件名

使用 Windows 不兼容字符查找和替换文件夹和文件名

通过子字符串文件名批量重命名文件

如何通过交换文件名中的子字符串来批量重命名文件?

使用FIND和MV重命名文件。删除找到的字符串,然后将其放在文件名之前?

CMD迭代并递归重命名所有文件名,并将当前子目录文件夹追加到当前文件名