2014-08-18 3 views
1

Я в настоящее время использую Process Task, чтобы попытаться распаковать файл в SSIS со следующими параметрами:распаковка файла, используя 7zip в SSIS

enter image description here

Я использую это заявление:

e "Inventory.zip" -o"c:\broinctarget\" -y 

Я на самом деле генерации выше заявление с помощью:

enter image description here

"e " +"\"" + "Inventory.zip" + "\"" + " -o" + "\"" [email protected][$Package::targetLocation] +"\""+" -y" 
@[$Package::targetLocation] 

Я делаю что-то, что явно не так?

Как распаковать файл .zip с помощью 7zip в SSIS?

+0

Я обнаружил, что при создании переменной, скажем, 'Arguments' и используя выражения, чтобы построить его, и * то * присвоив его свойству, как и вы с WorkingDirectory, гораздо чище, чем подход, строить его на самом компоненте, так как у вас нет возможности проверять конкатенированную строку во время выполнения. – billinkc

+0

большой плохой пример, спасибо –

ответ

1

Я столкнулся с аналогичной проблемой в пакете SSIS, который я написал. Я закончил создание командного файла в скрипте C# и просто вызвал этот командный файл в задачу процесса выполнения.

Мне также нужна была гибкость для добавления пароля, основанного на некоторых параметрах таблицы.

Я понимаю, что это дополнительный шаг, и если бы я разархивировал несколько файлов, это могло бы иметь значение, но для контейнера For-Every, который будет ударять по 5-10 файлам, это не очень важно - и вы можете легко прочитать командный файл, чтобы увидеть, что было запущено.

string exe7z = Dts.Variables["s7ZIPPath"].Value.ToString();; 
    string zipFile = Dts.Variables["sZIPFile"].Value.ToString(); 
    string outPath = Dts.Variables["sFileLocation"].Value.ToString(); 
    string password = Dts.Variables["sZIPPassword"].Value.ToString(); 

    if (password.Length > 0) 
    { 
     password = "-p\"" + password + "\""; 
    } 

    if (!(outPath.EndsWith("\\"))) 
    { 
     outPath = outPath + "\\"; 
    } 

    string batchFile = outPath + "unzip.bat"; 
    Dts.Variables["sZipBatchFile"].Value = batchFile; 

    using (StreamWriter writer = new StreamWriter(batchFile)) 
    { 
     writer.Write("\"" + exe7z + "\" e \"" + zipFile + "\" -o\"" + outPath + "\" -y " + password); 
    } 
Смежные вопросы