SSIS Переименование файла с расширением файла, появляющегося в правильном месте - PullRequest
2 голосов
/ 19 мая 2019

Мне нужно переименовать файл, содержащийся в переменной @FilePath, но проблема, с которой я сталкиваюсь, - это расширение, где я не могу понять, как я могу получить дату до расширения файла csv. Как я мог обойти это?

Вот как в настоящее время выводятся значения переменных:

User::FilePath  {C:\\SSIS\\Files\\Template.csv} String

User::FilePathRename    {C:\\SSIS\\Files\\Template.csv_19_05_2019_14_39_07.csv} String

FilePath имеет следующее выражение:

@[User::SourceFolder] + "\\" +  @[User::FileName]

SourceFolder - это папка, в которой цикл ForEach ищет и читает каждый файл .csv.

FilePathRename имеет следующее выражение:

@[User::FilePath] + "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , @[User::FileDate]), 2)
+ "_"
+ (DT_STR, 4, 1252) DATEPART("yyyy" , @[User::FileDate])
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("hh", @[User::FileDate]), 2) 
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mi", @[User::FileDate]), 2) 
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("ss", @[User::FileDate]), 2)
+ ".csv"

enter image description here

1 Ответ

3 голосов
/ 19 мая 2019

Подход с использованием выражений SSIS

Для достижения этого можно использовать TOKEN и TOKENCOUNT, попробуйте следующие выражения:

@[User::SourceFolder] + "\\" 
+  TOKEN(@[User::FileName], ".", 1) 
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , @[User::FileDate]), 2)
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , @[User::FileDate]), 2)
+ "_"
+ (DT_STR, 4, 1252) DATEPART("yyyy" , @[User::FileDate])
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("hh", @[User::FileDate]), 2) 
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mi", @[User::FileDate]), 2) 
+ "_"
+ RIGHT("0" + (DT_STR, 2, 1252)DATEPART("ss", @[User::FileDate]), 2)
+ ".csv"

Подход с использованием сценариев

Ноэто выражение может быть неточным, если имя файла содержит точки (пример: filename.1.xml) , я предпочитаю использовать задачу скрипта для достижения этой цели с помощью следующей строки кода:

DateTime FileDate = (DateTime)Dts.Variables["User::FileDate"].Value;
string oldFile = Dts.Variables["User::FilePath"].Value.ToString();
string newFile;
newFile = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(oldFile),System.IO.Path.GetFileNameWithoutExtension(oldFile)) + "\\" + FileDate.ToString("_dd_MM_yyyy_HH_mm_ss") + ".csv";
Dts.Variables["User::FilePathRename"].Value = newFile;

Ссылки

...