如何在最小匹配模式中同时使用 NOT 和 OR 进行过滤?

How can I filter with both NOT and OR in minimatch patterns?

我们正在使用 TFS 2017 和复制文件构建步骤将构建结果的特定文件复制到另一个目录。具体来说,我们只希望复制 *.dll 和 *.exe,但不要复制 *.Tests.dll 或 *.resources.dll.

构建步骤支持最小匹配模式来过滤文件,但我无法让它同时应用两个过滤器。

模式看起来像这样:

bin\**\?(*.exe|*.dll)
bin\**\!(*.Tests.dll|*.resources.dll)

例如文件夹内容为:

bin\Yes.dll
bin\Yes.exe
bin\No.Tests.dll
bin\No\Some.resources.dll

似乎这些模式是按顺序应用的,所以它们都是单独工作的,而不是一个接一个地工作。

我试过

bin\**\?(*.exe|*.dll)!(*.Tests.dll|*.resources.dll)

但这也没有用,没有过滤任何东西。我能以某种方式将它们组合成一个过滤器吗? docs 不包括这种情况。

好吧,看来你真的可以直接把表达式放在一起,只是过滤器要严格一些。这行得通,但我仍然不知道为什么:

bin\**\!(*.Tests.dll|*.resources.dll|*.pdb|*.xml|*.manifest)?(*.exe|*.dll)