Удаление файлов только в подпапках с помощью скрипта bat - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь удалить файлы, присутствующие во вложенном подкаталоге домашнего каталога Jenkins, но не что-либо вне вложенного подкаталога.

Вот структура каталога.

└───Jenkins_Home
    └───Jobs
        ├───Job1
        │   │   ot1.xml
        │   │
        │   └───fileParams
        │           sample1.war
        │
        ├───Job2
        │       ot2.xml
        │
        └───Job3
            │   ot3.xml
            │
            └───fileParams
                    sample2.war

Файлы, которые я хочу удалить: sample1.war & sample2.war, но не ot1.xml, ot2.xml и ot3.xml.

Я пробовал следующие методы, ноэти методы удаляют каждый файл * .txt.

Метод 1:

cd C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\**\fileParams
del /s /q *.war

Метод 2:

cd C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\**\**
del /s /q *.war

Метод 3:

cd C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\**
del /s /q *.war

Существует почти 100 таких структур каталогов, и я не хочу прибегать к ручным методам.

Какой правильный способ / сценарий соответствует вышеуказанным требованиям?

PS: Я хочу запускать эту работу каждую ночь, используя расписание cron в Jenkins.Из-за цели аудита я не могу удалить задания, но могу удалить встроенные артефакты, чтобы сохранить свет домашнего каталога jenkins.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Поскольку у вас есть только .war файлы в каталоге, из которого вы собираетесь их удалить, вы можете просто запустить цикл for /R, чтобы получить рекурс из самой высокой папки jobs, содержащей соответствующие каталоги:

@echo off
for /R "C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\" %%i in (*.war) do echo del /Q "%%~fi"

Просто удалите echo, как только вы убедитесь, что на экране есть нужный вам вывод.

1 голос
/ 02 мая 2019

В строке использования cmd:

for /R "C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs" %A in (fileParams) do @if exist "%A\*.war" @echo Del %A\*.war

В пакетном файле

@Echo off
for /R "C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs" %%A in (fileParams
    ) do if exist "%%A\*.war" echo Del %%A\*.war

образец вывода:

Del C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\Job1\fileParams\*.war
Del C:\Users\Kris\Desktop\MINE\Jenkins_home\jobs\Job3\fileParams\*.war

Если вывод выглядит нормально, удалите echo

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