自动运行cmd的Ant任务



我需要运行这样的命令:

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,这是在其他汇合命令中完成的方式)。

我一直在将所有的子页面提取到一个列表中——这部分我知道怎么做——并认为我应该从那里开始,但这种方式可以使用一个命令自动执行该过程。

更新二

正如我上面提到的,我找到了在某些情况下使用一个命令添加标签的方法,但后来我需要一种方法将标签添加到选定的页面标题列表(没有共同父页的页面)。所以我回到这个问题上,并使用这里的一个答案来设计一种方法,通过使用for在.txt文件中的标题列表上循环来添加标签。下面是我最后在。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中找到了。

您可以使用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和executable="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

使用批处理命令很容易使用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
)

相关内容

  • 没有找到相关文章

最新更新