Задача DeleteFiles исключить один файл из списка совпадений - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь настроить задачу DeleteFiles, чтобы удалить все DLL-файлы, начинающиеся с 'ab', за исключением указанного c.

Например, если у меня есть:

abfile.one.dll
abfile.two.dll
abotherfile.dll
System.Stuff.dll (there are 20-30 of these that need to be included)
abdontdeleteme.dll

Я ожидаю, что в результате файлы:

System.Stuff.dll
abdontdeleteme.dll

Я пробовал кучу различных конфигов, но ни один не работал. Конфиг, который я считал наиболее подходящим, был:

  - task: DeleteFiles@1
    displayName: 'Cleanup Assemblies'
    inputs:
      sourceFolder: ${{parameters.theDirectoryToCleanup}}
      contents: ab*.dll !abdontdeleteme.dll

Этот конфиг ничего не делает. Устанавливая System.Debug в true и глядя на вывод, я вижу:

##[debug]pattern: 'D:/a/1/b/api/bin/ab*.dll !abdontdeleteme.dll'
##[debug]applying include pattern against original list
##[debug]0 matches
##[debug]0 final results

Я также пытался с ab*.dll, который работал, но удалял одну DLL, которая мне нужна. Есть ли способ исключить указанный c файл из списка совпадений?

Редактировать

Согласно предложению в комментариях, я попробовал следующее к тому же Результаты (файлы не были удалены):

- task: DeleteFiles@1
    displayName: 'Cleanup Assemblies'
    inputs:
      sourceFolder: ${{parameters.theDirectoryToCleanup}}
      contents:
        ab*.dll 
        !abdontdeleteme.dll

Редактировать 2

Я попробовал следующее:

- task: DeleteFiles@1
    displayName: 'Cleanup Assemblies'
    inputs:
      sourceFolder: ${{parameters.theDirectoryToCleanup}}
      contents: |
        ab*.dll 
        !(abdontdeleteme.dll)

Это удаляет все, кроме ' abdontdeleteme.dl '

- task: DeleteFiles@1
    displayName: 'Cleanup Assemblies'
    inputs:
      sourceFolder: ${{parameters.theDirectoryToCleanup}}
      contents:
        ab*.dll 
        !(abdontdeleteme.dll)

Это снова ни к чему не приводит и ничего не удаляется.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

После большого разочарования я бросил и использовал Powershell, потому что он может делать то, что я хочу. Это не лучшее решение, но оно работает, так как некоторые другие шаги требуют изображения Windows в любом случае. Код, который работал:

- task: PowerShell@2
      displayName: "Cleanup Web Services"
      inputs:
        targetType: 'inline'
        script: Remove-Item "path\to\my\stuff\*" -Include "ab*.dll" -Exclude "abdontdeleteme.dll"
0 голосов
/ 05 февраля 2020

Исходя из задач компиляции логи c, вам лучше преобразовать направление синтаксиса, чтобы сообщить системе, какие файлы вам нужно сохранить.

Итак, просто попробуйте !(System.Stuff.dll|abdontdeleteme.dll) в определении задачи:

- task: DeleteFiles@1

  displayName: 'Delete files'

  inputs:

    SourceFolder: ${{parameters.theDirectoryToCleanup}}

    Contents: !(System.Stuff.dll|abdontdeleteme.dll)

Из журнала сборки можно легко обнаружить, что при указании нескольких совпадающих выражений в разных строках:

    ab*.dll 
    !(abdontdeleteme.dll)

Все они скомпилированы по отдельности в source path/ab*.dll source path/!(abdontdeleteme.dll). Но в настоящее время задачи не могут решить их обоих одновременно.

Между тем, если вы укажете эти 2 выражения в одной строке, система определит их как source path/ab*.dll !abdontdeleteme.dll. Очевидно, что удалить файлы не удалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...