SSIS - 将文件动态移动到具有匹配子字符串名称的文件夹

SSIS - Dynamically moving Files to Folder with Matching Substring Name

我正在使用 foreach 循环和文件系统任务将文件移动到特定文件夹(或至少尝试这样做)。

文件名可以是100000,需要到1000文件夹 文件 102000 需要转到文件夹 1020 文件 103000 需要转到文件夹 1030 ETC 等等

我正在为如何将文件移动到正确的文件夹而苦恼。

我想我可以使用一个带有上层目录的变量,后跟 foreach 循环中保存的文件名变量的子字符串

例如

"D:\Archive\" + SUBSTRING(@[USER::Variable],1,4)

但这不起作用,我收到路径格式不受支持的错误消息。

非常感谢任何帮助,谢谢。

您的问题

首先,我认为错误是因为变量包含完整路径而不仅仅是文件名所以你必须使用类似的表达式:

"D:\Archive\" + LEFT(RIGHT( @[User::Variable] , FINDSTRING(REVERSE( @[User::Variable] ) , "\", 1) - 1),4)

详细解决方案

第一种方法 - 使用脚本任务

尝试使用脚本任务来实现此目的,只需 select 您的变量作为脚本任务中的 ReadOnlyVariable。并使用类似的脚本 (我使用 Vb.net)

Public Sub Main()

    Dim strFile As String = Dts.Variables.Item("User::Variable").ToString

    Dim strFilename As String = IO.Path.GetFileName(strFile)


    'Create Directory
    If Not IO.Directory.Exists("D:\Archive\" & strFilename.Substring(0, 4)) Then
        IO.Directory.CreateDirectory("D:\Archive\" & strFilename.Substring(0, 4))
    End If

    'Copy File to destination
    IO.File.Copy(strFile, "D:\Archive\" & strFilename.Substring(0, 4) & "\" & strFilename)

    Dts.TaskResult = ScriptResults.Success
End Sub

第二种方法-使用文件系统任务

创建一个新变量 @[User::DestinationPath] 并将其设置为 属性 Evaluate As Expression = True,然后为其使用以下表达式:

"D:\Archive\" + LEFT(RIGHT( @[User::Variable] , FINDSTRING(REVERSE( @[User::Variable] ) , "\", 1) - 1),4)

变量截图

文件系统任务