我需要重命名变量@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"
答案 0 :(得分:3)
您可以使用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
),则此表达式可能不准确,我更喜欢使用脚本任务通过以下代码行实现该目的:< / p>
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;