文件匹配排除模式在复制文件任务中有效但在删除文件任务中无效?

File match exclude pattern working in Copy Files task but not in Delete Files task?

作为我的 TFS 2018 构建的一部分,我想同时使用复制文件和删除文件任务来移动文件。我在这两个任务中使用了相同的文件匹配模式,但我似乎得到了不同的行为。

场景: 我的 TFS 构建将构建工件复制到网络文件夹 \some\path\Beta。在我的构建中,这个路径被保存为一个变量,$(NetworkPath)。这些工件的根文件夹是一个版本号,当然,在每次构建时都会发生变化。我想通过添加包含所有以前版本的 $(NetworkPath)\PreviousVersions 来清理此文件夹,以便 "Beta" 中显示的唯一版本是最新版本。

我的尝试: 我在构建中添加了一个复制文件任务(第一个)和一个删除文件任务(第二个)。我的想法是将 $(NetworkPath) 中的所有内容复制到 $(NetworkPath)\PreviousVersions 中(不包括 $(NetworkPath)\PreviousVersions 中的内容),然后再进行第二次复制以将新版本放入 $(NetworkPath).

在任务定义中,两个任务的源文件夹是 $(NetworkPath),我在内容字段中为两个任务定义的 file matching patterns 是:

**\**
!PreviousVersions\**

复制文件任务中的目标文件夹自然是 $(NetworkFolder)\PreviousVersion

结果: 使用这些搜索路径,“复制文件”任务正常工作——它复制 $(NetworkPath) 但不在 $(NetworkPath)\PreviousVersions 中的所有内容并将其放入 $(NetworkPath)\PreviousVersions。不过,后续的删除文件任务会删除 $(NetworkPath) 中的所有内容,包括整个 $(NetworkPath)\PreviousVersions 文件夹。我预计它只会删除 $(NetworkPath) 中的文件和文件夹,但不会删除 $(NetworkPath)\PreviousVersions 中的文件和文件夹。

我在这里错过了什么?

以下是我找到的解决方法文件匹配模式,可实现我想要的行为:

  1. 对于复制文件任务:*.*.*.*\**

  2. 对于删除文件任务:*.*.*.*

显然,这利用了我要移动的文件有一个根文件夹的事实,该文件夹的名称是版本号(即 2.5.0.11),因此此解决方案不适用于很多人。

也就是说,这里有一些帮助我缩小问题和解决方案范围的事情:

  • globtester 是一个方便的小型小匹配模式测试器。

  • 在处理这两个任务时,在构建的排队面板中设置 debug = true 将为您提供有关匹配模式实际执行情况的更多有用日志.

对于大多数场景,Daniel Mann 的上述评论是适用的,我将在未来讨论这样的更改。