如何根据ssis中匹配的文件名和文件夹名称将文件移动到不同的文件夹

时间:2013-03-08 06:19:49

标签: file loops for-loop ssis each

我有四个文件xxxxxxCd999,xxxxCf999,xxxxC999,xxxxD999 ...我需要根据文件名将这些文件移动到各自的文件夹中,例如文件xxxxxCd999应该移动到文件夹Cd999,文件xxxxCf999应该移动到文件夹Cf999,文件xxxC999应该移动到文件夹C999,所以... 我如何在ssis中实现这一目标?

我已经为每个循环容器使用了一个,为sourcepath,destinationpath和一个文件系统任务分配了一些变量来使用这些变量,但我现在已经丢失了n不知道如何继续, 请帮助我

1 个答案:

答案 0 :(得分:3)

试试这个: -

Foreach Loop将枚举源文件夹,路径将存储在变量中。在script task编写代码以使用正则表达式获取文件夹名称。脚本任务值将存储在将在File System Task

中使用的另一个变量中

包装设计将是

enter image description here

  • 创建3个变量

     Name         DataType   Expression
     FolderName    string
     DestLoc       string     "D:\\"+ @[User::FolderName]   
     LoopFiles     string
    

DestLoc变量的上述表达式中,根据您的位置更改

  • ForEach循环配置 enter image description here

enter image description here

根据需要更改源文件夹位置

  • 脚本任务 - 添加2变量,如下所示 enter image description here

  • 您需要从变量LoopFiles

  • 中提取文件夹名称

实施例

LoopFiles变量在运行时将有D:\ForLoop\SampleFolder1.txt

因此,为了从上面的变量中提取文件夹名,请使用正则表达式

打开Edit Script并编写以下代码

List<string> filePatterns = null;

public void Main()
 {
     filePatterns = new List<string>();
     filePatterns.Add("Folder1");
     filePatterns.Add("Folder2");
     string fileName = Path.GetFileNameWithoutExtension(Dts.Variables["User::LoopFiles"].Value.ToString());
     Match match = Regex.Match(fileName, string.Join("|", filePatterns.ToArray()));
     Dts.Variables["User::FolderName"].Value = match.Value;
     Dts.TaskResult = (int)ScriptResults.Success;
  }

在上面的代码中,您将提取文件夹名称并将其存储在变量FolderName中。如果您有multiple folders,则只需将folder names添加到filePatterns收集变量。

  • 文件系统任务配置

enter image description here