Ich wenden das folgende an, das ein "yyyymmdd_hhmmss" (20170510_132402) Format ergibt, das Sie mit Ihrer DataLoadDir-Variable und ".txt" verketten können.
(DT_STR, 4, 1252) DATEPART ("yyyy", GETDATE()) + rechts ("0" + (DT_STR, 2, 1252) DATEPART ("mm", GETDATE()), 2) + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("dd", GETDATE()), 2) + "_" + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("hh ", GETDATE()), 2) + RECHTS (" 0 "+ (DT_STR, 2, 1252) DATEPART (" mi ", GETDATE()), 2) + RECHTS (" 0 "+ (DT_STR, 2, 1252) DATEPART ("ss", GETDATE()), 2)
Da ich mehrere Dateien mit diesem Format erzeugt habe, weise ich dies in einem Ausdruck einer Variablen zu und verkette diese Variable dann für jede neue Datei in die Verbindungsmanager. Wenn Sie dies auch tun, empfehle ich den gleichen Ansatz, um Ihr Paket modularer zu machen und Redundanz zu vermeiden. Nehmen Sie die Änderung in einer Variablen vor und sie wird automatisch überall dort angewendet, wo sie verwendet wird.
Da Sie jedoch tatsächlich versuchen, eine Datei aus einem Verzeichnis zu erfassen, das bereits den Zeitstempel enthält, und den Teil nur bis zum Zeitstempel bereitstellen möchten, verwenden Sie den ersten Teil des Dateinamens als Platzhalter. Ich empfehle folgendes:
Wenden Sie den folgenden Ausdruck auf eine Variable an. Dies wird nur den "xyz_20170510" Teil Ihres Dateinamens zurückgeben.
@ [User :: DataLoadDir] + "xyz _" + (DT_STR, 4,1252) DATEPART ("yyyy", getdate()) + RIGHT ("0" + (DT_STR, 4,1252) DATEPART ("mm", GETDATE()), 2) + rechts ("0" + (DT_STR, 4,1252) DATEPART ("dd", GETDATE()), 2)
Pass, dass neue Variable als bereit nur zu einer Skript-Aufgabe (die folgende ist C# verwenden), die tun wird, was Sie mit der Datei wollen. Der folgende Code wurde gegenüber dem aus C# example gesammelten Code geändert. Wenn C# nicht vorzuziehen ist, können Sie auch eine ForEach-Schleife verwenden, die im Dateinamen mit einer Systemaufgabe aufgelistet ist. .
String FileWildCard = Dts.Variables [ "User :: FileWildCard"] Value.ToString(); string [] files = System.IO.Directory.GetFiles (@ "\ dev01 \ E $ \ Daten \ Proc \ Opt", @FileWildCard + "* .txt"); foreach (Zeichenfolgendatei in Dateien) { System.IO.File.Copy (Datei, @ "\ dev01 \ E $ \ Daten \ Proc \ Opt test \" + System.IO.Path.GetFileName (Datei), true); }
Bitte lassen Sie mich wissen, wenn dies hilft.
mein Zeitstempel variiert jeden Tag für die Datei. Die Zeilen RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("hh", GETDATE()), 2) + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("mi", GETDATE ()), 2) + RECHTS ("0" + (DT_STR, 2, 1252) DATEPART ("ss", GETDATE()), 2) bekomme ich die aktuelle Zeit. Wie konfiguriere ich es, um den wechselnden Dateinamen jeden Tag zu bekommen –
Ihr Problem ist verwirrend. Am Anfang klang es so, als ob Sie nur eine Datei erzeugen wollten, die den Zeitstempel im Dateinamen dynamisch enthält. Aber jetzt verstehe ich nicht. Was meinst du "es konfigurieren, um den wechselnden Dateinamen jeden Tag zu erhalten"? Was ist das "große Bild" Ziel mit der Datei generiert? Generieren Sie es tatsächlich nicht, sondern versuchen, es aus einem Verzeichnis zu erfassen, das nur auf dem Datumsstempelteil basiert (den Zeitstempel ignorierend)? – user3662215
Ja, ich brauche eine Datei aus dem Ordner, die den Zeitstempel ignoriert –