使用TeamCity构建脚本中的百分号

tsp*_*uld 36 teamcity

我正在尝试设置一个运行自定义命令行脚本的TeamCity构建过程.该脚本使用变量,因此需要百分号(例如%x).但是TeamCity对其属性使用百分号(例如%build.number%),因此脚本中的百分号会在运行时被删除.

如果脚本包含以下内容:

for /d %x in ("c:\*") do @echo "%x"
Run Code Online (Sandbox Code Playgroud)

这就是它实际运行的内容:

for /d x in ("\*") do @echo "x"
Run Code Online (Sandbox Code Playgroud)

如何编写我的脚本以便它可以包含变量?

小智 61

如果你想将%传递给TeamCity,你应该用其他%来逃避它,即%必须是%%.

但是Windows命令行将%视为转义字符,所以你应该再次转义它,在每个%之前添加另一个%,即对于%%,你应该传递%%%%

流程是:

%%%% in cmd -> %% in TeamCity -> % actual sign.
Run Code Online (Sandbox Code Playgroud)

tl;博士:回答你的问题将是:

for /d %%%%x in ("c:\*") do @echo "%%%%x"
Run Code Online (Sandbox Code Playgroud)

  • @Newbee 有两层逃逸。第一个是 TeamCity,第二个是命令行。因此,如果您将 %%%% 传递到 TeamCity,它会将其解释为 %% 并将其传递到命令行。然后命令行接受 %% 并将其解释为 %。 (2认同)

Aar*_*lla 34

尝试for /d %%x in ("c:\*") do @echo "%%x"(即复制%符号).

但应该有一种方法告诉TC单独留下文件.如果TC会删除来源中的百分号,那将是可怕的.因此,我很确定你在配置中做了一些事情来启用替换%.

在类似的说明中,是否真的TC与剧本混淆?或者您使用构建工具来生成脚本或类似的东西?

  • 此外,我能够通过将百分号增加三倍来使其作为自定义脚本运行. (6认同)
  • 哦,我的上帝!我花了一整天的时间试图解决这个问题.非常感谢! (3认同)