【问题标题】:how to move files to different folders , based on matching filename and foldername in ssis如何根据 ssis 中匹配的文件名和文件夹名将文件移动到不同的文件夹
【发布时间】:2013-02-23 15:21:57
【问题描述】:

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

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

【问题讨论】:

  • 以上文件夹是否已经创建?
  • 是的,目标文件夹已经存在

标签: file loops for-loop ssis each


【解决方案1】:

试试这个:-

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

包装设计将是

  • 创建3个变量

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

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

  • ForEach 循环配置

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

  • 脚本任务 - 添加 2 变量如下

  • 需要从变量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集合变量中。

  • 文件系统任务配置

【讨论】:

  • 您好,我也有类似的要求。当我按照您的流程进行操作时,我收到一条错误消息:“[文件系统任务] 错误:发生错误并显示以下错误消息:“不支持给定路径的格式。”。”
  • 如果您在for each循环配置器中选择“名称和扩展名”,您以后不需要从变量中提取名称,它只会存储文件名
猜你喜欢
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 2017-09-16
  • 2012-12-31
  • 2023-03-17
相关资源
最近更新 更多