我不会尝试构建所有可能文件名的列表,而是遍历文件夹中的所有文件并使用脚本任务来确定要进一步处理的文件。
控制流程如下所示:
![foreach 循环容器的屏幕截图](https://i.stack.imgur.com/jwviB.jpg)
withFELC_InputFolderContents
的变量映射因此设置:
![foreach 循环容器设置的屏幕截图](https://i.stack.imgur.com/GnKow.jpg)
SCR_SetProcessFileFlag
的配置:
![脚本任务设置截图](https://i.stack.imgur.com/Mjqvn.jpg)
SCR_SetProcessFileFlag
的脚本是这样的:
public void Main()
{
string targetFileFullPath = (string)Dts.Variables["User::TargetFileFullPath"].Value;
string targetFileName = Path.GetFileName(targetFileFullPath);
Dts.Variables["ProcessFileFlag"].Value = IsValidFileName(targetFileName);
Dts.TaskResult = (int)ScriptResults.Success;
}
private bool IsValidFileName(string targetFileName)
{
bool result = false;
if (Path.GetExtension(targetFileName) == "xls")
{
string fileNameOnly = Path.GetFileNameWithoutExtension(targetFileName);
if (fileNameOnly.Substring(0, 4) == "ABC_" || fileNameOnly.Substring(0, 4) == "XYZ_")
{
string datePart = fileNameOnly.Substring(4);
DateTime dateRangeStart = DateTime.Today.AddDays(-7);
DateTime dateRangeEnd = DateTime.Today;
DateTime fileDate;
if (DateTime.TryParse(datePart, out fileDate))
{
if (dateRangeStart <= fileDate && fileDate <= dateRangeEnd)
{
result = true;
}
}
}
}
return result;
}
SCR_SetProcessFileFlag
以及如此配置的优先级约束DTT_ProcessSelectedFile
:
![优先约束设置截图](https://i.stack.imgur.com/1HeQk.jpg)
(显然,具体逻辑IsValidFileName
取决于您的特定要求。)