【问题标题】:Zip a folder using SSIS使用 SSIS 压缩文件夹
【发布时间】:2017-06-07 14:59:08
【问题描述】:

我正在尝试压缩 SSIS 中的文件夹,源文件夹中有 12 个文件,我需要压缩该文件夹。我可以很好地压缩文件我的问题是文件夹。

我必须使用 winzip 来创建压缩包。

谁能给我一个好的教程。我无法实现我找到的任何示例。

谢谢

【问题讨论】:

  • 请展示您尝试过的内容并参考您使用的示例以避免不必要的“试试这个..哦我试过那个,它没有工作”来回。
  • 它可以帮你启动link
  • 您好@alex 感谢您的帮助!我试着按照你的方式做。我完全按照你建议的方式做了,但我的包只是成功执行而不压缩文件夹。考虑我尝试的方式..sFolderCompressed --> F:\Archieve\test.zip ,sFolderSource --> F:\Source\test..这些是我传递的值,并在脚本任务中的只读变量中调用它们正如你所建议的。但什么都没有改变。请纠正我的错误。
  • 尝试使用 sFolderCompressed --> F:\Archieve\test,不要使用 F:\Archieve\test.zip;我希望这会有所帮助。
  • 我做了一个改变......没有改变发生@alex......

标签: sql-server ssis zip etl


【解决方案1】:

添加一个Script Task,你可以使用ZipFile(class)here reference,你必须参考项目中的System.IO.Compression.FileSystem 程序集(.NET Framework 4.5)。

您需要向脚本任务提供要压缩的文件夹和压缩文件夹的名称作为 ReadOnlyVariables(要添加到选项卡 ReadOnlyVariables)

这两个变量必须在包的Variables选项卡(String类型)中定义,并且可以通过循环动态改变(例如for each)

我使用这两个变量:

sFolderCompressed - the folder '.zip' that you want to obtain eg. C:\folder1\result.zip 
sFolderSource - the source folder containing the files affected eg. C:\folder1\folder2

脚本是用c#制作的,选择脚本语言:Microsoft Visual C#

这是要在 Main 方法中添加的代码:

using System.IO.Compression;

    public void Main()
    {
        try
        {
            string zipPath = (string)Dts.Variables["User::sFolderCompressed"].Value;
            string startPath = (string)Dts.Variables["User::sFolderSource"].Value;


            ZipFile.CreateFromDirectory(startPath, zipPath);
        }
        catch (Exception objException)
        {
            Dts.TaskResult = (int)ScriptResults.Failure;
            // Log the exception
        }
        Dts.TaskResult = (int)ScriptResults.Success;
    }

希望能帮到你。

【讨论】:

  • @ɐlǝx 。伟大的。这对我帮助很大。
  • 您好,我正在使用 VS 2010,当我尝试使用您的方法时出现错误,我也使用了命名空间:错误 1 ​​当前上下文中不存在名称“ZipFile”
  • 您好,您必须先将程序集 System.IO.Compression.FileSystem 添加到您的项目中;右键单击 References -> Add Reference -> Assemblies -> Framework -> 检查 System.IO.Compression.FileSystem 然后确定(您可能会看到参考列表中的项目)
【解决方案2】:

尝试使用 7zip,它是免费的。看看7zip command line user guide 它包含你需要的所有命令

并使用脚本任务或执行流程任务来实现这一点。还有其他有用的链接:

更新 1

您可以点击此链接获取 winzip:

在上面的链接中,他们建议使用此命令:

 wzzip "c:\Test.zip" "c:\myfolder" -exPR

【讨论】:

  • 谢谢。但是在我的用户中,他们仅使用 winzip 我没有使用 7 zip 的权限。请与 winzip 分享解决方案
【解决方案3】:

把这些东西写在bat文件里... "C:\Program Files\WinZip\WINZIP64.EXE" -a "C:\Desktop\destination_folder\Sample.zip" "C:\Desktop\Sample"

在执行进程任务中:

在Execute process Task-->Process-->Executable中提到bat文件的位置。

一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2010-09-05
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多