SSIS如何将多个.ZIP文件解压缩到多个文件夹

时间:2015-04-22 18:33:53

标签: visual-studio-2008 foreach ssis bids

问题/场景:

在目录中我有多个.zip档案。其中每个都包含多个.csv文件。我需要将每个.zip存档的内容解压缩到与源.zip存档同名的目录中:

C:\MyDirectory\Data1.zip extract files to C:\MyDirectory\Data1
C:\MyDirectory\Data2.zip extract files to C:\MyDirectory\Data2

我有一个包含执行进程任务的Foreach循环。该任务使用7zip来提取每个目录的内容。此任务设置了以下变量:

varZipSourceFolder = \\<server>\c$\MyDirectory
varZipDestination  = \\<server>\c$\MyDirectory\
varZipFileName
varExePath         = C:\Program Files\7-Zip\7z.exe

问题是,截至目前,该任务已成功运行并从第一个存档中提取文件。但是,当从下一个.zip归档文件中提取时,它会尝试提取到创建的第一个目录:

C:\MyDirectory\Data1.zip is extracting to C:\MyDirectory\Data1
C:\MyDirectory\Data2.zip is extracting to C:\MyDirectory\Data1

以下是VS2008中SSIS项目的一些屏幕抓取:

ForEach循环:

ForEach Collection Settings

ForEach VariableMappings

执行流程任务:

ExecuteProcessTask Process

ExecuteProcessTask Expressions

非常感谢任何帮助!另外,如果我需要以任何方式编辑问题以帮助更好地传达我的问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

所以经过一段时间和亵渎之后我就明白了。

我最终使用@ Joost的自定义Unzip Task来处理解压缩但是得到它并且ForEach循环被配置为适用于我的特定问题本身就是一项艰巨的任务。

我继续使用@Joost和@billinkc的评论重新创建了我的变量。它花了我一秒钟,但我终于能够用变量的“切片和骰子”来包围他们所指的内容。

我会尽力传达所做的事情,万一其他人在研究中遇到这种情况。

<强>答案/解决方案:

首先,我从头开始重新创建变量。我特别确保包含一个用于Joost的解压缩任务作为目标变量,一个作为源变量。这些变量与其他变量定义一起评估为以下表达式:

varUnzipTaskSource = @[User::varServer] + "\\" + @[User::varZipSource] + "\\" +  @[User::varZipFile] + ".zip"
varUnzipTaskDestination = @[User::varServer]  + "\\"  + @[User::varZipSource] +  "\\" + @[User::varZipFile] + "\\"

varServer    = \\MyServer\c$
varZipSource = \MyFolder
varZipFile   = MyFileName (no extension in the filename)

接下来,我按如下方式设置我的ForEach循环容器:

注意:使用UNC路径并选择仅名称 ForEach Collection Settings

注意:“仅名称”选项将用于创建目标目录。 ForEach Variable Mappings

现在解压缩任务配置:

Unzip Task Configuration

总之,拆分源和目标的路径是关键。 ForEach循环获取每个.zip存档的名称,根据该值创建一个目录,然后将数据提取给它。

我还将尝试在不使用Joost的自定义任务的情况下使其工作。我将使用该信息更新此答案(如果可能)。

再次感谢@Joost和@billinkc让我朝着正确的方向前进。