文件匹配排除模式在复制文件任务中有效但在删除文件任务中无效?
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
中的文件和文件夹。
我在这里错过了什么?
以下是我找到的解决方法文件匹配模式,可实现我想要的行为:
对于复制文件任务:*.*.*.*\**
对于删除文件任务:*.*.*.*
显然,这利用了我要移动的文件有一个根文件夹的事实,该文件夹的名称是版本号(即 2.5.0.11),因此此解决方案不适用于很多人。
也就是说,这里有一些帮助我缩小问题和解决方案范围的事情:
globtester 是一个方便的小型小匹配模式测试器。
在处理这两个任务时,在构建的排队面板中设置 debug
= true
将为您提供有关匹配模式实际执行情况的更多有用日志.
对于大多数场景,Daniel Mann 的上述评论是适用的,我将在未来讨论这样的更改。
作为我的 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
中的文件和文件夹。
我在这里错过了什么?
以下是我找到的解决方法文件匹配模式,可实现我想要的行为:
对于复制文件任务:
*.*.*.*\**
对于删除文件任务:
*.*.*.*
显然,这利用了我要移动的文件有一个根文件夹的事实,该文件夹的名称是版本号(即 2.5.0.11),因此此解决方案不适用于很多人。
也就是说,这里有一些帮助我缩小问题和解决方案范围的事情:
globtester 是一个方便的小型小匹配模式测试器。
在处理这两个任务时,在构建的排队面板中设置
debug
=true
将为您提供有关匹配模式实际执行情况的更多有用日志.
对于大多数场景,Daniel Mann 的上述评论是适用的,我将在未来讨论这样的更改。