在没有Foreach的情况下复制SSIS中的所有文件

时间:2014-04-18 17:19:28

标签: ssis

是否可以在不使用foreach的情况下将所有文件从一个文件夹复制到另一个文件夹?

我的源代码为c:\ test1 * .txt

和目的地为c:\ test2

当我使用文件系统任务执行此操作时,出现以下错误

 An error occurred with the following error message: "Illegal characters in path.".

2 个答案:

答案 0 :(得分:8)

是的,可以将所有文件从一个文件夹复制到另一个文件夹。下面,我的源代码是C:\ test1,我的目标是C:\ test2。下面的任务会将所有文件从C:\ test1复制到C:\ test2。

enter image description here

您获得的错误是由于源中的星号。你想使用通配符吗?文件系统任务不允许使用通配符。查看File System Task上的文档,下面是摘录:

  

文件系统任务在单个文件或目录上运行。   因此,此任务不支持使用通配符   对多个文件执行相同的操作。拥有文件   系统任务对多个文件或目录重复操作,put   Foreach循环容器中的文件系统任务,如中所述   以下步骤:

     
      
  • 配置Foreach循环容器在。的Collection页面上   Foreach循环编辑器,将枚举器设置为Foreach文件枚举器和   输入通配符表达式作为枚举器配置   文件。在Foreach循环编辑器的“变量映射”页面上,映射a   您要用于一次传递一个文件名的变量   文件系统任务。

  •   
  • 添加和配置文件系统任务添加   文件系统任务到Foreach循环容器。在常规页面上   文件系统任务编辑器,设置SourceVariable或   DestinationVariable属性到您在中定义的变量   Foreach循环容器。

  •   

另一种选择是在脚本任务中编写一个复制例程:

string fileName = string.Empty;
string destFile = string.Empty;
string sourcePath = @"C:\test1";
string targetPath = @"C:\test2";   

// Create a new target folder, if necessary. 
if (!System.IO.Directory.Exists(targetPath))
{
    System.IO.Directory.CreateDirectory(targetPath);
}

if (System.IO.Directory.Exists(sourcePath))
{
    string wildcard = "*.txt";
    string[] files = System.IO.Directory.GetFiles(sourcePath, wildcard);

    // Copy the files and overwrite destination files if they already exist. 
    foreach (string s in files)
    {
        fileName = System.IO.Path.GetFileName(s);
        destFile = System.IO.Path.Combine(targetPath, fileName);
        System.IO.File.Copy(s, destFile, true);
    }
}
else
{
    throw new Exception("Source path does not exist!");
}

答案 1 :(得分:3)

或者执行过程任务:

COPY c:\test1*.txt c:\test2

此代码在减少键盘磨损方面比脚本任务高25倍。 :P