Задача Ant для автоматизации запуска cmd

Мне нужно выполнить команду, как это:

atlassian confluence --action addLabels --labels labelName --space nameOfSpace --title "title name"

для длинного списка названий. Команда принимает только один title аргумент и параметр.

Могу ли я автоматизировать это с помощью задачи Ant, которая выбирает список заголовков в качестве входных данных, помещает каждое из них в команду, подобную приведенной выше, и запускает ее?

Я полагаю, что я мог бы просто использовать replaceregexp, чтобы обернуть каждый заголовок в моем списке в вышеупомянутой команде, и поместить все это в файл bat для многократного выполнения команд, но разве нет лучшего способа?

Я пробовал разделенные запятыми списки заголовков и другие попытки запустить список в одной команде, но кажется, что он принимает только по одному за раз, и документация для CLI ничего не говорит о том, как поступить иначе.

ОБНОВИТЬ:

Мне все еще было бы любопытно узнать, как выполнить вышеупомянутое, но я наконец нашел способ сделать то, что мне нужно, в одной команде. То есть добавить или удалить ярлыки на страницах в Confluence для всех "дочерних" страниц с заданным заголовком, просто введя заголовок верхней страницы:

confluence --action runFromPageList --space "SpaceName" --title "Parent Page Name" --descendents --common "--action addLabels --labels "New-Label-To-Add" --title ""@title@"" --space "SpaceName"" 

Это использует интерфейс командной строки Confluence. Недостающий трюк должен был использовать -descendents (не --children, как это делается в других командах слияния).

Я извлек все дочерние страницы в список - ту часть, которую я знал, как это сделать - и решил, что пойду оттуда, но таким образом он автоматизирует процесс с помощью одной команды.

ОБНОВЛЕНИЕ II

Как я упоминал выше, я нашел способ добавлять метки с помощью одной команды в некоторых случаях, но позже мне понадобился способ добавить метки в выбранный список заголовков страниц (страниц без общего родителя). Поэтому я вернулся к этому и использовал один из ответов здесь, чтобы придумать способ добавления меток с помощью for цикл по списку заголовков в текстовом файле. Вот что я положил в свой файл.bat:

cmd /k for /F "usebackq delims=" %%A in (my.list.txt) DO (confluence --action addLabels --labels labelName --space spaceName --title "%%A")

Один недостаток заключался в том, что названия имеют пробелы в именах, поэтому мне пришлось добавить "usebackq delims=" который я нашел в ответе № 2 здесь.

2 ответа

Решение

С помощью пакетной команды легко for команда. Простой пример:

for %%A in ("Title 1" "Title 2" "Title2") DO (
    atlassian confluence --action addLabels --labels labelName --space nameOfSpace --title %%A
)

Проблема здесь заключается в удобочитаемости, если список заголовков действительно большой. Лучшее решение - иметь process.cmd скрипт и файл list.txt со всеми названиями. Окончательный сценарий будет:

@echo off
for /F %%A in (list.txt) DO (
   atlassian confluence --action addLabels --labels labelName --space nameOfSpace --title %%A

)

Вы можете использовать apply для запуска команды в коллекции ресурсов, например так:

<project name="project" default="addLabels">

<!-- comma-separated list of titles -->
<property name="titles" value='foo,"bar baz",etc' />

<target name="addLabels">
    <apply executable="atlassian" relative="true">
        <arg value="confluence" />
        <arg value="--action" />
        <arg value="addLabels" />
        <arg value="labelName" />
        <arg value="--space" />
        <arg value="nameOfSpace" />
        <arg value="--title" />
        <tokens>
            <string value="${titles}" />
            <stringtokenizer delims="," />
        </tokens>
    </apply>
</target>

Протестировано с Ant 1.9.2 и исполняемым файлом ="echo", дает:

Buildfile: build.xml
    addLabels:
    [apply] confluence --action addLabels labelName --space nameOfSpace --title foo
    [apply] confluence --action addLabels labelName --space nameOfSpace --title "bar baz"
    [apply] confluence --action addLabels labelName --space nameOfSpace --title etc
BUILD SUCCESSFUL
Другие вопросы по тегам