0

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

我用谷歌搜索了一堆,大多数解决方案都说在脚本任务中做一些 C# 来完成这个。似乎我应该能够在 Foreach 容器中执行此操作,也许在带有表达式的集合区域中。但是我在属性表达式编辑器中找不到有关各种属性的任何信息时遇到了麻烦。FileSpec名称和FileNameRetrieval属性之间有什么区别?

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

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

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

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

4

2 回答 2

1

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

使用通配符 (*) 指定要包含在集合中的文件。例如,要包含名称中包含“abc”的文件,请使用以下过滤器:*abc*。

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

有关更多详细信息,请参见此处:https ://docs.microsoft.com/en-us/sql/integration-services/control-flow/foreach-loop-container#enumerator-dynamic-options

于 2018-03-24T01:52:21.943 回答
0

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

于 2018-03-28T14:43:34.977 回答