我正在尝试设置运行自定义命令行脚本的TeamCity构建过程。该脚本使用变量,因此需要百分号(例如%x
)。但是TeamCity对其属性使用百分号(例如%build.number%
),因此脚本中的百分号会在运行时被删除。
如果脚本包含:
for /d %x in ("c:\*") do @echo "%x"
这就是它实际运行的内容:
for /d x in ("\*") do @echo "x"
如何编写脚本以便包含变量?
答案 0 :(得分:58)
如果你想将%传递给TeamCity,你应该用其他%来逃避它,即%必须是%%。
但是Windows命令行将%视为转义字符,所以你应该再次转义它,在每个%之前再添加%,即对于%%,你应该传递%%%%
流程是:
%%%% in cmd -> %% in TeamCity -> % actual sign.
tl;博士:回答你的问题:
for /d %%%%x in ("c:\*") do @echo "%%%%x"
答案 1 :(得分:32)
尝试for /d %%x in ("c:\*") do @echo "%%x"
(即复制%符号)。
但应该有一种方法告诉TC单独留下文件。如果TC会删除来源中的百分号,那将是可怕的。因此,我非常确定您在配置中执行了一些操作,以便替换%
。
在类似的说明中,是否真的TC与剧本混淆?或者您使用构建工具来生成脚本或类似的东西吗?
答案 2 :(得分:3)
似乎TeamCity只是简单地将您输入的内容粘贴到a .cmd
文件中
在这些情况下,for
语句需要双倍百分比。
然后看来TeamCity删除了其中一个%
符号,因此tspauld为什么要让它工作(这也是我如何运行它)。
在日志中,似乎TeamCity在这里创建了一个文件Program Files\TeamCity\buildAgent\temp\agentTmp
,但是for cmd执行并且很快就会死掉它以查看它所写的内容,大概是如果第一行是一个长时间执行的任务,你将能够检查一下(恼人地'暂停'不起作用)。