我有一个For For file Enumerator。在我有E:\Input
在我有"*" + @[User:Date] + "*.*"
日期变量设置为20180101
。
变量映射设置为User::FileToBeMoved
在枚举器中,我有一个文件系统移动文件,其中Source是变量User::FileToBeMoved
,目标是包含E:\Input\Archive
的变量
我的文件有In20180101.txt
,Intermediate20180101.txt
和Out20180101.txt
文件未被移动。看起来它没有识别过滤器"*" + @[User:Date] + "*.*"
如果我进入Windows资源管理器并将*20180101*.*
放在搜索框中,它会完全符合我的要求,向我显示包含20180101
的3个文件
有人可以告诉我为什么这不适用于SSIS吗?
谢谢,
迪克
答案 0 :(得分:0)
“文件”部分提供了通用
您需要在FileSpec
我发现更容易创建一个执行逻辑的变量而不是将其嵌入到容器中,因为您可以检查变量中的值而不是任务。
如果您使用Biml,这将创建一个包,其中包含基于变量DateString的值将表达式应用于For Each File Enumerator的文件规范的所有工作。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="so_48067171">
<Variables>
<Variable Name="Date" DataType="String">20180101</Variable>
<Variable Name="DateString" DataType="String" EvaluateAsExpression="true">"*" + @[User::Date] + "*"</Variable>
<Variable Name="CurrentFile" DataType="String">Demo.txt</Variable>
<Variable Name="ArchiveFolder" DataType="String">C:\ssisdata\archive</Variable>
</Variables>
<Tasks>
<ForEachFileLoop Name="FELC TodayFiles" Folder="C:\ssisdata\input" FileSpecification="*.txt" >
<VariableMappings>
<VariableMapping Name="0" VariableName="User.CurrentFile" />
</VariableMappings>
<Expressions>
<Expression ExternalProperty="FileSpec">@[User::DateString]</Expression>
</Expressions>
<Tasks>
<FileSystem Name="FST Archive file" Operation="MoveFile" >
<VariableInput VariableName="User.CurrentFile" />
<VariableOutput VariableName="User.ArchiveFolder" />
</FileSystem>
</Tasks>
</ForEachFileLoop>
</Tasks>
</Package>
</Packages>
</Biml>
您的TODO将根据当前日期或日期减去一个来设置@ [User :: Date]的值。