SSIS动态文件夹配置求助:遍历H盘加载指定路径Excel文件
解决SSIS中遍历含固定子文件夹的动态路径问题
嘿,我懂你现在的困扰——要在H盘里揪出所有包含固定"a"文件夹的路径,不管上级的"xy*"文件夹名字怎么变,之前用System.IO.Directory.GetDirectories只拿到第一个结果,完全满足不了需求对吧?别慌,咱们一步步来搞定这个问题:
方法一:递归遍历+精准筛选目标路径
你可以先递归遍历H盘所有目录,再筛选出那些包含"a"子文件夹的路径。这里关键要用上SearchOptions.AllDirectories确保递归到所有层级,再对每个结果做判断:
// 在SSIS脚本任务的Main方法中编写 using System.IO; using System.Collections.Generic; public void Main() { List<string> targetPaths = new List<string>(); // 递归获取H盘下所有目录 string[] allDirs = Directory.GetDirectories(@"H:\", "*", SearchOption.AllDirectories); foreach (string dir in allDirs) { // 检查当前目录下是否存在名为"a"的子文件夹 if (Directory.Exists(Path.Combine(dir, "a"))) { targetPaths.Add(dir); } } // 把结果存入SSIS变量(假设你有一个名为User::TargetFolderPaths的Object类型变量) Dts.Variables["User::TargetFolderPaths"].Value = targetPaths; Dts.TaskResult = (int)ScriptResults.Success; }
这个方法能把所有包含"a"子文件夹的路径都捞出来,不管上级目录叫啥名字。
方法二:分层搜索提升效率(适配"xy*"前缀的上级目录)
如果你的上级目录都是以"xy"开头的,那咱们可以缩小搜索范围,先找所有"xy*"文件夹,再在每个里面找"a"文件夹,比全量递归快不少:
public void Main() { List<string> targetPaths = new List<string>(); // 先抓取H盘下所有xy开头的顶层文件夹 string[] xyDirs = Directory.GetDirectories(@"H:\", "xy*", SearchOption.TopDirectoryOnly); foreach (string xyDir in xyDirs) { // 在每个xy开头的文件夹里递归查找"a"文件夹 string[] aDirs = Directory.GetDirectories(xyDir, "a", SearchOption.AllDirectories); foreach (string aDir in aDirs) { // 如果需要"a"文件夹的上级路径,就用Path.GetDirectoryName(aDir) targetPaths.Add(Path.GetDirectoryName(aDir)); } } Dts.Variables["User::TargetFolderPaths"].Value = targetPaths; Dts.TaskResult = (int)ScriptResults.Success; }
后续SSIS流程处理
拿到所有目标路径后,你可以用Foreach循环容器遍历这个Object类型的变量,循环内部添加Excel源组件,就能批量加载对应"a"文件夹下的Excel文件了。记得在Foreach循环里选择「Foreach从变量枚举器」,把存储路径列表的变量选进去就行。
内容的提问来源于stack exchange,提问作者Hmen
相关产品推荐
相关产品推荐

