使用TeamCity构建脚本中的百分比登录

使用TeamCity构建脚本中的百分比登录,teamcity,Teamcity,我正在尝试设置一个TeamCity构建过程,该过程运行自定义命令行脚本。脚本使用了一个变量,因此它需要一个百分号(例如,%x)。但是TeamCity对其属性使用百分号(例如,%build.number%),因此脚本中的百分号在运行时会被删除 如果脚本包含以下内容: for /d %x in ("c:\*") do @echo "%x" 这就是它实际运行的内容: for /d x in ("\*") do @echo "x" 如何编写脚本以使其包含变量?请尝试为/d%%x输入(“c:\*”)执

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

如果脚本包含以下内容:

for /d %x in ("c:\*") do @echo "%x"
这就是它实际运行的内容:

for /d x in ("\*") do @echo "x"
如何编写脚本以使其包含变量?

请尝试
为/d%%x输入(“c:\*”)执行@echo“%%x”
(即复制%符号)

但是应该有一种方法告诉TC不要处理文件。如果TC删除源中的百分比符号,那将是可怕的。因此,我很确定您在配置中做了一些事情,以启用替换
%


同样的,是TC真的弄乱了脚本吗?或者您正在使用构建工具生成脚本或类似的东西?

看来TeamCity只是将您输入的内容粘贴到.cmd文件中 在这些情况下,
for
语句需要两个百分比。 然后,TeamCity似乎删除了其中一个
%
标志,这就是tspauld让它工作的原因(这也是我让它运行的方式)


在日志中,TeamCity似乎在这里创建了一个文件
Program Files\TeamCity\buildAgent\temp\agentTmp
,但是for cmd执行并很快消失,看不到它写了什么,假设第一行是一个长时间执行的任务,那么您可以检查这个(令人烦恼的是“暂停”不起作用).

如果要将%传递给TeamCity,则应使用其他%,即%必须为%%

但windows命令行将%视为转义字符,因此您应该再次转义它,在每个%之前添加另一个%,即%%应通过%%

流量为:

%%%% in cmd -> %% in TeamCity -> % actual sign.
tl;dr:您的问题的答案是:

for /d %%%%x in ("c:\*") do @echo "%%%%x"

TeamCity不接触它在代理机器上运行的文件;你确定是TC在欺骗百分比吗?我试图使用自定义脚本而不是单独的文件。将其移动到一个文件会有所帮助。我最初尝试使用自定义脚本而不是单独的文件,并尝试使用重复的百分比符号,但没有成功。不过,在单独的文件中使用它们是可行的。此外,我还可以通过将百分号增加三倍使其作为自定义脚本工作。不过,您的脚本损坏一定有原因。哪个程序展开
%build.number%
?真的是TC吗?如果是这样,那么必须有一个选项将其关闭。如果您需要版本号,我建议您将其放入另一个脚本中,并阅读它将
调用
。哦,我的天哪!我花了一整天的时间想弄明白。非常感谢你!您好,Marat,您的回答帮助我在命令行构建步骤中跳过了%。但我仍然不明白为什么我需要通过4%的标志,而%%应该逃脱标志?你有任何解释这一点的文档链接吗?@Newbee有两层转义。第一个是TeamCity,第二个是命令行。因此,如果将%%%%传递给TeamCity,它会将其解释为%%,并将其传递给命令行。然后命令行接受%%,并将其解释为%%。谢谢您的回答!