【问题标题】:Ant task to automate running a cmd自动运行 cmd 的 Ant 任务
【发布时间】:2014-08-13 06:37:31
【问题描述】:

我需要运行这样的命令:

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

我一直在将所有子页面提取到一个列表中——这部分我知道该怎么做——我想我会从那里开始,但这样它就可以使用一个命令来自动化这个过程。

更新二

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

【问题讨论】:

  • 你有命令列表还是必须自动从某个地方提取?如果只是从字符串循环,批处理for 命令可以帮助您。
  • 这只是一个命令,每次相同的命令,参数显示为“标题名称”唯一的变化,对于标题列表中的每个。你能演示一下 for 命令是如何做到这一点的吗?谢谢。

标签: batch-file ant command-line-interface confluence-rest-api


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案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
    
    )
    

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 2011-12-30
      • 2011-03-31
      • 2021-11-06
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      相关资源
      最近更新 更多