SSIS 如何将多个 .ZIP 文件提取到多个文件夹

SSIS How To Extract Multiple .ZIP Files To Multiple Folders

Problem/Scenario:

在一个目录中,我有多个 .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-Zipz.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 循环:

执行进程任务:

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

所以经过大量的时间和亵渎,我明白了。

我最终使用@Joost 的自定义 Unzip Task 来处理解压缩,但是获取它和配置为解决我的特定问题的 ForEach 循环本身就是一项艰巨的任务。

我继续使用@Joost 和@billinkc 的评论重新创建了我的变量。我花了一秒钟,但我终于能够理解他们所指的变量 "slice and dice"。

我会尽力传达所做的工作,以防其他人在他们的研究中遇到这个问题。

Answer/Solution:

首先,我从头开始重新创建变量。我特别确保包含一个将用于 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 路径和 select 仅名称

注意:仅名称 selection 将用于创建目标目录。

现在解压缩任务配置:

总而言之,将通往源头和目的地的路径分开是关键。 ForEach 循环仅获取每个 .zip 存档的名称,根据该值创建一个目录,然后将数据提取到其中。

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

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