Задача 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