C# 在C中或使用脚本将匹配文件名的文件批量移动到文件夹

C# 在C中或使用脚本将匹配文件名的文件批量移动到文件夹,c#,file-io,C#,File Io,我想知道是否有人可以帮助我或向我指出正确的方向来移动文件,其中文件名的一部分需要与foldername的一部分匹配,例如: 将文件名Cust-10598.txt移动到名为John-Doe-10598的文件夹中是否可行 我能够在包含所有文件的根目录中创建所有文件夹,现在我想对它们进行排序,并将每个文件夹放在匹配的文件夹中 非常感谢您提供的任何帮助或想法如果命名约定如此简单,您可以简单地在“-”上拆分 class Program { static void Main(string[] arg

我想知道是否有人可以帮助我或向我指出正确的方向来移动文件,其中文件名的一部分需要与foldername的一部分匹配,例如:

将文件名Cust-10598.txt移动到名为John-Doe-10598的文件夹中是否可行

我能够在包含所有文件的根目录中创建所有文件夹,现在我想对它们进行排序,并将每个文件夹放在匹配的文件夹中


非常感谢您提供的任何帮助或想法

如果命名约定如此简单,您可以简单地在“-”上拆分

class Program
{
    static void Main(string[] args)
    {
        var file = "Cust-10598.txt";
        var fileSplit = file.Split('-');
        var sourceDir = @"C:\";
        var destFolder = "{name of destination folder}-" + Path.GetFileNameWithoutExtension(fileSplit[1]);
        var destPath = @"C:\newpath";

        File.Move(Path.Combine(source, file), Path.Combine(destPath, destFolder, file));
    }
}

假设您已经有一个使用Directory.GetDirectores的文件夹列表

var listOfFolders = Directory.GetDirectories(basePath);
您可以使用以下方法找到给定文件名的关联文件夹

string GetAssociatedDirectory(string fileName,IEnumerable<string> folderNames)
{
    Regex regEx = new Regex(@"Cust-(?<Id>[\d]*)",RegexOptions.Compiled);
    Match match = regEx.Match(fileName);
    if (match.Success)
    {
        var customerId = match.Groups["Id"].Value;

        if(folderNames.Any(folder=>folder.EndsWith($"-{customerId}")))
        {
            return folderNames.First(folder=>folder.EndsWith(customerId));
        }
        else
        {
            throw new Exception("Folder not found");
        }
    }
    throw new Exception("Invalid File Name");
}

然后可以使用File.Move将文件复制到目标目录

是否有命名约定?当你提到零件时,它总是数字零件吗?数字部分是否总是在末尾?是的,文件的命名约定是前缀CUST+客户ID+文件ID,如此CUST\u xxx\u xxx文件夹的命名方式是此FirstName+LastName+客户ID,如此FirstName LastName idCUST+客户ID+文件ID=>按文件ID,你是指文件扩展名吗?对不起,我把它放在没有文件扩展名的地方,它应该看起来像这个cust_custID_fileID.txtCust-10598.txt,那么这里的fileID是什么呢?目标文件夹的filename firstname和lastname中没有数据,但是它们有ID。文件夹看起来像这个firstname lastname ID,如何将文件中的ID与文件夹中的ID进行匹配,以便随后将其分配给var destFolder?iffolderNames.Anyfolder=>folder.EndsWith$-{customerId}因此这将从文件中提取的ID与任何以-ID结尾的文件夹进行匹配?是的,没错。它将提取的客户Id与文件夹名称相匹配,文件夹名称以IDWorks结尾,在传递单个文件名时就像一个符咒,但在传递数组时,我会得到无效的文件名错误,这就是我正在尝试的:string[]array=Directory。GetFiles@c:\test3;数组{string testdir=GetAssociatedDirectoryname,listOfFolders;Console.WriteLinetestdir;}@cadash中的每个字符串名称遇到一个文件名,该文件名没有代码规定的客户ID时,会引发自定义异常中的无效文件。您可能有兴趣检查这些文件,以确保文件夹中的所有文件都具有指定格式的客户id谢谢!非常感谢你!我对regex有点笨,我怎么能让它同时匹配前缀Cust-和Customer-呢Regex@Cust-?[\d]*?