You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SSIS复制并重命名最新带时间戳的CSV文件

实现步骤(SSIS 处理带时间戳的CSV文件)

1. 预定义变量

先在SSIS包的变量面板创建以下变量(作用域设为包级别):

  • SourceFolder(字符串):Folder A的完整路径,例:C:\Data\FolderA
  • TargetFolder(字符串):Folder B的完整路径,例:C:\Data\FolderB
  • FilePrefixes(字符串数组):存储3个文件的统一前缀,例:{"Sales_", "Inventory_", "Customers_"}
  • CurrentPrefix(字符串):循环时存储当前处理的文件前缀
  • LatestFilePath(字符串):存储找到的对应前缀的最新文件路径
  • TargetFileName(字符串):存储去掉时间戳后的目标文件完整路径

2. 循环遍历每个文件前缀

添加Foreach循环容器,配置如下:

  • 枚举器类型选择「Foreach From Variable Enumerator」
  • 变量选择User::FilePrefixes
  • 在「变量映射」里,将索引0映射到User::CurrentPrefix,实现逐个遍历3个文件前缀

3. 筛选对应前缀的最新文件

在Foreach容器内添加脚本任务,用来定位最新文件:

  • 只读变量勾选:User::SourceFolder, User::CurrentPrefix
  • 读写变量勾选:User::LatestFilePath
  • 编辑脚本(C#示例):
using System.IO;
using System.Linq;

public void Main()
{
    string sourceDir = Dts.Variables["User::SourceFolder"].Value.ToString();
    string prefix = Dts.Variables["User::CurrentPrefix"].Value.ToString();

    // 获取前缀匹配的所有CSV文件,按最后修改时间倒序排序
    var matchedFiles = Directory.GetFiles(sourceDir, $"{prefix}*.csv")
                                .OrderByDescending(f => File.GetLastWriteTime(f))
                                .ToList();

    if (matchedFiles.Any())
    {
        Dts.Variables["User::LatestFilePath"].Value = matchedFiles.First();
    }
    else
    {
        // 无匹配文件时抛出警告,可根据需求调整逻辑
        Dts.Events.FireWarning(0, "FindLatestFile", $"未找到前缀为{prefix}的CSV文件", "", 0);
    }

    Dts.TaskResult = (int)ScriptResults.Success;
}

4. 生成去时间戳的目标文件名

在脚本任务后添加第二个脚本任务,处理文件名:

  • 只读变量勾选:User::LatestFilePath, User::CurrentPrefix, User::TargetFolder
  • 读写变量勾选:User::TargetFileName
  • 编辑脚本(根据你的时间戳格式调整,示例为前缀_时间戳.csv):
using System.IO;

public void Main()
{
    string fullSourcePath = Dts.Variables["User::LatestFilePath"].Value.ToString();
    string prefix = Dts.Variables["User::CurrentPrefix"].Value.ToString();
    string targetDir = Dts.Variables["User::TargetFolder"].Value.ToString();

    // 提取前缀+后缀生成目标文件名(跳过时间戳部分)
    string targetFileName = $"{prefix.Substring(0, prefix.Length - 1)}.csv";
    Dts.Variables["User::TargetFileName"].Value = Path.Combine(targetDir, targetFileName);

    // 如果时间戳是下划线分隔(例:Sales_20240520_1030.csv),可改用Split逻辑:
    // string fileName = Path.GetFileName(fullSourcePath);
    // string cleanName = $"{fileName.Split('_')[0]}.csv";
    // Dts.Variables["User::TargetFileName"].Value = Path.Combine(targetDir, cleanName);

    Dts.TaskResult = (int)ScriptResults.Success;
}

5. 复制文件到目标文件夹

在第二个脚本任务后添加文件系统任务:

  • 操作选择「复制文件」
  • 源连接选择User::LatestFilePath
  • 目标连接选择User::TargetFileName
  • 勾选「覆盖目标文件」(确保最新文件能替换旧版本)

6. 定时调度

用SQL Server代理创建作业,设置每小时执行一次该SSIS包,实现自动定时处理。

注意事项

  • 确保SSIS执行账户对Folder A和Folder B有完整的读写权限
  • 测试时可手动生成不同时间戳的文件,验证脚本是否能正确筛选最新文件
  • 若时间戳格式有变化,只需调整第二个脚本任务中的字符串处理逻辑即可

内容的提问来源于stack exchange,提问作者Shivendra Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:27:24