SSIS Foreach 循环遍历名称中带有 "crosswlk" 的文本文件

SSIS Foreach loop through text files with "crosswlk" in the name

在我的 Foreach 循环中,我只想处理文件名中包含 crosswlk 的文件。不幸的是,这是在文件名的中间,我不能做 crosswlk.pgp.

我用谷歌搜索了很多,大多数解决方案都说在脚本任务中执行一些 C# 来完成这个。看起来我应该能够在 Foreach 容器中执行此操作,也许在带有表达式的集合区域中。但我无法在 属性 表达式编辑器中找到有关各种属性的任何信息。名称、FileSpecFileNameRetrieval 属性之间有什么区别?

我想我可以做类似的事情:

Property: Name
Expression: `FINDSTRING(@[User::SourceFilename],"crosswlk",1) > 0`

对我来说,这意味着只处理文件名中包含 crosswlk 的文件。但这是行不通的。我确实注意到单词 crosswlk 总是从文件名的第 13 个字符开始,所以我尝试使用子字符串,但也没有成功。

有没有办法以这种(或另一种)方式过滤文件名,或者使用 C# 是唯一的方式?非常感谢!

根据文档,您应该可以在“文件”字段中使用通配符。

Use wildcard characters (*) to specify the files to include in the collection. For example, to include files with names that contain “abc”, use the following filter: *abc*.

所以,你应该可以使用这样的东西:*crosswlk*

详情请看这里:https://docs.microsoft.com/en-us/sql/integration-services/control-flow/foreach-loop-container#enumerator-dynamic-options

如果制作可用的通配符太难,那么一个可能有用的选项是使用 FOREACH ADO 枚举器。首先,你 "fill" 一个记录集对象变量,其中包含你想要的所有文件名,然后你可以循环遍历它。 您可以通过脚本任务填充记录集对象并使用 C# system.IO 查询文件系统。 如果您需要严格控制处理哪些文件(例如,防止加载测试文件),这是一种方便的方法