SSIS在遍历子文件夹的foreach循环中检索当前文件夹

时间:2011-10-13 07:32:52

标签: sql-server loops ssis

我使用SSIS读取输入中的.txt文件并通过它们执行我的业务逻辑将输出结果保存在一个文件中,该文件的名称与当前的inpout文件相同(文件名动态存储在变量中)。

当所有文件都存储在同一个文件夹中时,访问它们没有问题,因为我在数据流中对平面文件连接字符串使用以下表达式:"path" + @[User::inputFileName] + ".txt"

现在我必须处理一个包含子文件夹的文件夹(我在foreach循环中设置了遍历子文件夹),我对平面文件连接字符串有一些问题,因为我不能使用像这样的通配符:my path\\subfolder*" + @[User::inputFileName] + ".txt"每个子文件夹都有相同的名称,只更改名称的最后部分。

如何将当前子文件夹名称保存在变量中,以便我可以按以下方式使用它? "path\\"+ @[User::currentSubFolder] +"\\" + @[User::inputFileName] + ".txt"

1 个答案:

答案 0 :(得分:1)

我能够解决我的问题,因此我在这里写下我的解决方案,以防其他人处于同样的情况。

我在foreach循环之前使用了一个脚本转换块。从中我可以检索当前的完整路径(之后在平面文件连接字符串中使用)和没有扩展名的输入文件名,以用作包含SSIS脚本结果的输出文件名。

为了保留兴趣值,我使用了2个变量:一个用于文件名,一个用于路径。

这里是脚本代码:

Public Sub Main()

    'Variable Index 0 => FileName
    'Variable Index 1 => filePath

    Dim fullPath As String = Dts.Variables.Item(1).Value.ToString
    Dim fileName As String = Path.GetFileName(fullPath)
    fileName = fileName.Substring(0, fileName.Length - 4) 

    Dts.Variables.Item(0).Value = fileName
    Dim x As String = Dts.Variables.Item(0).Value.ToString

    Dts.TaskResult = Dts.Results.Success
End Sub