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

问题描述:

问题/情景:SSIS如何提取多个.zip文件到多个文件夹

里面的目录我有多个.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

它看起来像varZipDestination是东西被提取到。我认为你需要对varZipFileName进行一些切片和切块来提取基本文件名。然后应用表达式将该值连接到varZipSourceFolder – billinkc

+1

varZipDestination变量上是否有表达式? – Joost

+0

我想我看到你们在...我需要创建额外的变量来“分解”ZipFileName以获得碎片路径,然后使用这些碎片创建ZipDestination路径正确吗? 我对SSIS很新,如果可能的话可以在正确的方向使用一个点。 – PDXWReX

因此,经过了一段时间和亵渎我已经得到它。

我结束了使用@ 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

注意:Name Only选项将用于创建Destination目录。 ForEach Variable Mappings

而且现在的解压任务配置:

Unzip Task Configuration

综上所述,分崩离析的路径,源和目标是关键。 ForEach循环抓取每个.zip压缩文件的名称,根据该值创建一个目录,然后将数据提取到该目录。

我也将试图让这个工作不使用Joost的自定义任务。我会用这个信息更新这个答案(如果可能的话)。

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