SSIS循环容器无法重命名带增量后缀文件的问题求助
解决SSIS中重复文件名(带括号后缀)的归档问题
核心问题定位
你的判断完全正确:重命名步骤依赖静态变量FileImport.csv匹配文件名,但休息日积累的文件会被Windows自动添加(1)、(2)这类后缀,静态匹配无法命中这些变体,导致归档失败。
具体修复步骤
1. 调整Foreach循环的文件匹配规则
- 打开读取CSV的Foreach循环容器,将文件筛选器从
FileImport.csv修改为FileImport*.csv,确保能捕获所有带后缀的同名文件。 - 确认循环容器绑定的文件名变量(比如命名为
CurrentFileName)会存储每个匹配到的完整文件名(包括(1)这类后缀),而非固定值。
2. 重命名/归档步骤改用循环变量
- 替换重命名操作中的静态文件名引用,全部使用循环变量
CurrentFileName:- 源文件路径:
@[User::SourceFolder] + @[User::CurrentFileName] - 目标归档路径:
@[User::ArchiveFolder] + @[User::Timestamp] + "_" + @[User::CurrentFileName](可根据需求调整时间戳拼接逻辑,确保文件名唯一)
- 源文件路径:
3. 联动移动与重命名步骤
如果文件移动和重命名是两个独立步骤,必须保证两者都引用同一个CurrentFileName变量:
- 移动步骤:将
@[User::SourceFolder] + @[User::CurrentFileName]移动到暂存区路径 - 重命名步骤:以暂存区路径 +
@[User::CurrentFileName]作为源,重命名为带时间戳的目标文件名
4. 可选:提前规避Windows自动加后缀
在文件导入前,用Script Task提前给重复文件重命名,避免Windows自动添加括号:
string sourceFolder = Dts.Variables["User::SourceFolder"].Value.ToString(); foreach (string filePath in Directory.GetFiles(sourceFolder, "FileImport*.csv")) { FileInfo file = new FileInfo(filePath); // 用文件创建时间生成唯一后缀 string newName = $"FileImport_{file.CreationTime:yyyyMMddHHmmssfff}.csv"; file.MoveTo(Path.Combine(sourceFolder, newName)); } Dts.TaskResult = (int)ScriptResults.Success;
验证方法
手动在源文件夹创建FileImport.csv、FileImport (1).csv、FileImport (2).csv,运行流程检查所有文件是否被正确导入、重命名并归档;调试时查看CurrentFileName变量是否正确捕获每个文件的完整名称。
内容的提问来源于stack exchange,提问作者Sparke
相关产品推荐
相关产品推荐

