Dateien eines Ordners mit SSIS verschieben und mit 7-Zip archivieren

Neben den auf codeplex verfügbaren Tasks zum Packen und Entpacken von Dateien gibt es auch andere Varianten um dies durchzuführen. Ich möchte in diesem Blogbeitrag erklären, wie man mit Hilfe von SSIS bestimmte Dateitypen in einem Ordner in einen anderen Ordner verschiebt. Danach sollen diese Dateien mit SSIS gepackt werden. Als Archivierungsprogramm wird 7zip (Open-Source) verwendet.

Vorbereitend müssen folgende Variablen erzeugt werden:

image

Initial werden die Pfade für den Quellpfad, Zielpfad und den Dateinamengesetzt. Ich hab mich der Einfachheit halber für D:\Quelle\ und D:\Ziel\ entschieden.

Um die Werte für die anderen Variablen zu erzeugen, gehen wir über das Eigenschaftsfenster der jeweiligen Variable und setzen den Eintrag für EvaluateAsExpression auf „True“.

image

Danach muss man auf Expression klicken, um das folgende Fenster für die Variable sErzeugeZielOrdnerangezeigt zu bekommen.

image

Der oben angegebene Ausdruck soll zu einem späteren Zeitpunkt dafür sorgen, dass in dem festgelegten Zielpfad ein Ordner mit dem Schlüssel YYYYMMDD (20120224 steht für den 24.02.2012) angelegt wird. Hier noch der Ausdruck damit Ihr diesen nicht abtippen müsst:

(DT_STR, 4, 1252)DATEPART(„yyyy“, GETDATE()) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„mm“, GETDATE()), 2) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„dd“, GETDATE()), 2)

Zu beachten ist die Escape sequence für den Backslash am Ende. Dieser wird durch \\ gesetzt.

Die beiden Expressions für sQuellpfadUndDateiname und sZielpfadUndDateiname werden auch über das Eigenschaftsfenster angelegt. Folgende Ausdrücke habe ich dafür verwendet:

sQuellpfadUndDateiname: @[User::sQuellpfad] + @[User::sDateiname]

sZielpfadUndDateiname: @[User::sErzeugeZielOrdner] + @[User::sDateiname]

Nachdem die Variablen angelegt sind, geht es mit der Ablaufsteuerung weiter. Folgendes Bild zeigt vorab den Endzustand.

image

In einen Sequenzcontainer legen wir einen Task ’Dateisystem‘ (in der Abb. FSYS erstelle Zielordner) der mit einem Sequenzcontainer verbunden wird.

Den Task habe ich folgendermaßen konfiguriert:

image

Die Konfiguration für den Foreach-Schleifencontainer (in der Abb. FELC durchsuche Quellordner):

image

Da ich aus dem Quellordner nur die txt-Dateien kopieren möchte, gebe ich unter Dateien den Ausdruck *.txt an. Abschließend erfolgt die Variablenzuordnung.

image

In den Foreach-Schleifencontainer wird ein weiterer Task ‚Dateisystem‘ (in Abb. FSYS verschiebe Dateien) angelegt. Dessen Konfiguration sieht wie folgt aus:

image

Da ich meine Dateien zunächst kopieren möchte, wähle ich unter Operation: Datei kopieren.

Danach wird der Sequenzcontainer mit einem Task `Prozess ausführen`(in Abb. ERP packe XML in zip-Archiv) verbunden. Dieser wird wie folgt konfiguriert:

image

Unter Executable wird der Pfad zur 7z.exe angegeben. Der Ausdruck für Arguments zeigt folgendes Bild:

image

Die Kommandozeilenparameter für 7zip lassen sich recht schnell im Internet finden. Mit dem angegebenen Ausdruck erzeuge ich im Zielordner eine zip-Datei mit dem Namen des aktuellen Tages.

Ausdruck:

„a“ + “ “ + @[User::sErzeugeZielOrdner] + (DT_STR, 4, 1252)DATEPART(„yyyy“, GETDATE()) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„mm“, GETDATE()), 2) + RIGHT(„0“ + (DT_STR, 2, 1252)DATEPART(„dd“, GETDATE()), 2) + „.zip “ +@[User::sErzeugeZielOrdner]

Ein abschließender Durchlauf beweist, dass das Paket funktioniert. Alle Dateien die den Dateityp .txt haben, werden von D:\Quelle\ nach D:\Ziel\20120224\20120224.zip archiviert. Wie üblich könnte Ihr jegliche Kritik oder auch Anregungen gern in den Kommentaren hinterlassen.

Schreibe einen Kommentar