SSIS - Foreach Loop Exclude Files containing a specific word
Assuming that we want to loop over
.xlsx and we want to exclude files containing the word "Report", so whe are searching for something like this in the Foreach Loop container *<>Report*.xlsx
Unfortunately, we cannot achieve this using SSIS expression (something like
*[^...]*.xlsx) you have to search for some workarounds:
Workarounds
First
Get List of - filtered - files using an
Execute Script Task before entering Loop and loop over then using ForEach Loop container (Ado enumerator)- You have to a a SSIS variable (ex:
User::FilesList) with typeSystem.Object(Scope: Package) - Add an
Execute Script Taskbefor the for each Loop container and addUser::FilesListas a ReadWrite Variable - In the Script Write The following Code:Imports System.Linq Imports System.IO Imports System.Collections.Generic
Public Sub Main() Dim lstFiles As New List(Of String) lstFiles.AddRange(Directory.GetFiles("C:\Temp", "*.xlsx", SearchOption.TopDirectoryOnly).Where(Function(x) Not x.Contains("Report")).ToList) Dts.Variables.Item("FilesList").Value = lstFiles Dts.TaskResult = ScriptResults.Success End Sub - In the For each Loop Container Choose the Enumertaion Type as 'From variable Enumerator' and choose
FilesListvariable as a source
ScreenShots
Second
Inside the for each loop add an
Expression Task to check if the file contains Report string or not- Add a variable of type
System.Boolean(Name: ExcludeFile) - Inside the ForEach Loop Container add an
Expression Taskcomponent before the DataFlowTask you that imports the Excel File -
Inside The Expression Task write the following:
@[User::ExcludeFile] = (FINDSTRING(@[User::XlsxFile], "Report", 1 ) == 0)
Note: It is not necessary to use an
Expression Task to validate this you can use a Dummy DataFlowTask or a Script Task to check if the filename contains the Keyword you want to exclude or not
This is a part of my Stackoverflow answer posted 6 Mar 2017





