TeamCity在命令行构建步骤中与%符号发生冲突

10

我有一个批处理文件,用于将一个文件夹及其内容复制到新位置,并根据日期和时间创建文件夹名称(这个功能可用):

SET TODAY=%DATE:/=-%
SET NOW=%TIME::=-%
XCOPY /S /Y "C:\BuildAgent\temp\buildTmp" "C:\Automation Results\%TODAY%_%NOW%\" 

我在我的Team City设置中添加了一个新的配置步骤,以包含这个批处理文件。构建步骤是一个命令行 - 自定义脚本:

Build Step

但这对TC代理要求产生了不利影响,我无法启动我的TC构建:

Agent Requirements

这个问题似乎与TC隐式要求有关:

http://confluence.jetbrains.com/display/TCD8/Agent+Requirements

"隐式要求 对未知参数的任何引用(在%符号中的名称)都被视为“隐式要求”。这意味着构建只会在提供命名参数的代理上运行。否则,该参数应通过在构建配置或项目级别上定义它来使其可用于构建配置。"

我如何解决这个需要在我的批处理文件中使用%符号的TC冲突?

2个回答

13

请使用%%代替%

SET TODAY=%%DATE:/=-%%
SET NOW=%%TIME::=-%%
XCOPY /S /Y "C:\BuildAgent\temp\buildTmp" "C:\Automation Results\%%TODAY%%_%%NOW%%\"

这将确保变量被视为批处理文件变量,而不是TeamCity变量。


不错的提示。这确实可以确保变量被视为批处理文件变量而不是TeamCity变量。 - Benny Meade
如果您需要在文件夹中使用FOR循环并操作文件,并且需要使用双百分号,则需要将两个百分号替换为四个。示例可以如下所示:FOR /D %%%%f in (%system.teamcity.build.workingDir%\path\to\folder*) do xcopy "%%%%f*.*" "path\to\other\folder%%%%~nf_blah.%build.counter%" /Q /E /I - demp

3
将您的构建脚本内容放入一个文件中,例如copy.bat,并从TeamCity调用此批处理文件。 此外,从“自定义脚本”更改为“带参数的可执行文件”。 enter image description here

1
你说得对!简单的解决方案就是将批处理文件添加到我的项目中,并通过TeamCity从该位置调用它。 - Benny Meade
这样做的优点是批处理文件可以纳入源代码管理。 - wal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接