2010-12-08 59 views
30

我想設置一個運行自定義命令行腳本的TeamCity構建過程。該腳本使用變量,因此需要百分號(例如%x)。但TeamCity爲其屬性使用百分號(例如%build.number%),因此腳本中的百分號在運行時會被刪除。在TeamCity構建腳本中使用百分號

如果腳本包含此:

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

這就是實際上它運行:

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

我怎麼能寫我的劇本,因此它可以包含變量?

+0

的TeamCity不觸及其上運行的代理計算機中的文件;你確定這是百分之百的百分比嗎? – 2010-12-08 16:48:38

+1

我正在嘗試使用自定義腳本而不是單獨的文件。將它移動到一個文件有幫助。 – tspauld 2010-12-08 17:14:14

回答

28

嘗試for /d %%x in ("c:\*") do @echo "%%x"(即重複%符號)。

但是應該有辦法告訴TC單獨離開文件。如果TC將消除來源中的百分比標誌,那將是非常可怕的。因此,我非常肯定你在配置中做了一些事情來替換%

在一個類似的說明,它真的是TC與腳本混淆?或者你使用構建工具來生成腳本或類似的東西?

+0

我最初嘗試使用自定義腳本而不是單獨的文件,並嘗試使用重複的百分號,但它不起作用。儘管在單獨的文件中使用它們。 – tspauld 2010-12-08 17:12:04

3

似乎TeamCity只是堅持你輸入a .cmd文件 for聲明在這些情況下需要雙重百分比。 然後TeamCity似乎刪除了這些%標誌中的一個,因此tspauld爲什麼要使用它(這也是我如何運行它)。

在日誌中,似乎TeamCity在這裏創建了一個文件Program Files\TeamCity\buildAgent\temp\agentTmp,但for cmd執行並死亡得太快以至於看不到它寫了什麼,大概如果第一行是一個長執行任務,您將能夠檢查它(煩惱'停頓'不起作用)。

50

如果您想將%傳遞給TeamCity,您應該使用其他%進行轉義,即%必須爲%%。

但Windows命令行考慮%作爲轉義字符,所以你應該逃避它的每個%之前再增加另一個%,即對%%你應該通過%%%%

流程是:

%%%% in cmd -> %% in TeamCity -> % actual sign. 

TL;博士:回答你的問題將是:

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