问题/场景:
在目录中我有多个.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循环:
执行流程任务:
非常感谢任何帮助!另外,如果我需要以任何方式编辑问题以帮助更好地传达我的问题,请告诉我。
答案 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循环获取每个.zip存档的名称,根据该值创建一个目录,然后将数据提取给它。
我还将尝试在不使用Joost的自定义任务的情况下使其工作。我将使用该信息更新此答案(如果可能)。
再次感谢@Joost和@billinkc让我朝着正确的方向前进。