您需要在 for-each 之前添加一个 Get Metadata 活动。 Get Metadata 活动将获取当前目录中的文件并将它们传递给 For-Each。你将它连接到你的 Blob 存储文件夹。
试试这样的
设置 JSON 源:
创建一个管道,使用 GetMetadata 活动 列出容器/存储中的所有文件夹。选择字段作为 childItems
将元数据输出(容器内容列表)输入过滤活动并仅过滤文件夹。
将文件夹列表输入到 ForEach 活动
在 ForEach 中,将 current item() 设置为变量,并将其用作参数化源数据集的参数,该数据集是原始源的克隆!
这将导致列出容器中每个文件夹中的文件。
将其提供给另一个过滤器,这次过滤文件。使用@equals(item().type,'File')
现在创建另一个管道,我们将为每个发现与其父文件夹同名的文件运行复制活动。
在新的子管道中创建参数,以从父管道接收迭代中的当前文件夹和文件名以评估副本。
在子管道中,从 foreach 开始,其输入将是接收到参数的文件夹内的文件名列表:@pipeline().parameters.filesnamesreceived
使用变量来保存当前项目,并使用 IfCondition 检查文件名和文件夹名是否匹配。
注意:尝试根据您的要求评估删除文件扩展名,因为元数据将包含完整的文件名以及
它的扩展名。
如果 True -> 名称匹配,则从源复制到接收器。
这里保留了层次结构,您还可以使用“前缀”来提及文件路径,因为它复制时保留了层次结构。它利用 Blob 存储的服务端过滤器,提供比通配符过滤器更好的性能。
前缀中最后一个“/”之后的子路径将被保留。比如你有source container/folder/subfolder/file.txt,并且配置prefix为folder/sub,那么保存的文件路径就是subfolder/file.txt。哪个适合您的场景。
这会将/source/source/source.json 之类的文件复制到/sink/source/source.json