我正在构建一个自动化流程,用于从 Outlook 中提取文件。
我遇到的情况是,需要提取邮件附件中的 ZIP 文件。我使用的是解压缩活动。我的做法是提取邮件中的所有文件附件,保存到临时文件夹中,然后将文件移到实际的共享文件夹中。
到目前为止,代码运行正常,直到我遇到了一个新情况。
让我解释一下我的代码。
对于每封带附件的邮件,将附件保存到临时文件夹。保存之前会清空该文件夹。
然后读取文件格式,如果文件不是 ZIP 文件,就移到共享文件夹。
如果是 ZIP 文件,就解压到同一个文件夹中,然后
我使用 For Each File 将文件夹中的每个文件移到共享文件夹。
问题是,有些 ZIP 文件中直接包含文件,也就是文件被压缩在 .zip 文件中。
现在我遇到了一个新情况:.zip 文件里包含一个文件夹,文件都在该文件夹中。
我当前的代码会提取文件夹,然后也会保存 ZIP 文件。
它会将 .zip 文件移到共享文件夹,而不是连同文件夹一起移过去。
我该如何处理这种情况?
能帮帮我吗?
补充请求:当前代码有点慢……不确定该如何优化。
在你的场景中,问题出现在 ZIP 文件中包含文件夹结构,而不是直接位于根目录下的文件时。解压 ZIP 文件后,文件会放在子文件夹中,但自动化流程只会处理主临时目录中的文件。
在 UiPath 中,解决这个问题的一个简单方法是使用 For Each File in Folder 活动中的 “Include subfolders” 选项。
启用此选项后,该活动会遍历文件夹及其所有嵌套文件夹中的文件,确保正确处理从 ZIP 压缩包中解压的文件(即使它们位于文件夹中)。
解决步骤:
- 按照你目前的做法,将 ZIP 文件解压到临时文件夹。
- 使用 For Each File in Folder 遍历解压后的文件。
- 启用 Include subfolders 选项。
- 将文件移至共享文件夹。
示例流程:
- 清空临时文件夹
- 将附件保存到临时文件夹
- 如果文件类型为
.zip → 解压到临时文件夹
- 使用 For Each File in Folder (Include subfolders = True)
- 将文件移至共享文件夹
这样可以确保自动化流程能够处理 ZIP 文件中包含的以下内容:
- 直接位于 ZIP 文件中的文件
- 包含文件的文件夹
- 多层嵌套文件夹
谢谢,
Karthik