Использование знака процента в сценариях сборки TeamCity - PullRequest
35 голосов
/ 08 декабря 2010

Я пытаюсь настроить процесс сборки TeamCity, который запускает собственный сценарий командной строки. Скрипт использует переменную, поэтому ему нужен знак процента (например, %x). Но TeamCity использует знаки процента для своих свойств (например, %build.number%), поэтому знак процента в скрипте удаляется при запуске.

Если скрипт содержит это:

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

Вот что на самом деле работает:

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

Как мне написать свой скрипт, чтобы он мог включать переменные?

Ответы [ 3 ]

58 голосов
/ 17 января 2013

Если вы хотите передать% в TeamCity, вы должны экранировать его с другим%, т. Е. Для% это должно быть %%.

Но командная строка Windows считает% как escape-символ, поэтому вы должны экранироватьон снова добавляет еще один% перед каждым%, то есть для %% вы должны передать %%%%

Поток:

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

tl; dr: ответить наВаш вопрос будет:

for /d %%%%x in ("c:\*") do @echo "%%%%x"
32 голосов
/ 08 декабря 2010

Попробуйте for /d %%x in ("c:\*") do @echo "%%x" (т.е. дублируйте знаки%).

Но должен быть способ заставить TC оставить файл в покое. Было бы ужасно, если бы TC убрал знаки процента в источниках. Поэтому я уверен, что вы сделали что-то в конфигурации, чтобы включить замену %.

На аналогичной ноте, действительно ли ТС мешает сценарию? Или вы используете инструмент для сборки скрипта или что-то в этом роде?

3 голосов
/ 18 июля 2012

Кажется, что TeamCity просто вставляет то, что вы вводите в a .cmd файл Оператор for требует двойного процента в этих случаях. Затем кажется, что TeamCity удаляет один из этих % признаков, поэтому tspauld заставил его работать (это также, как я заставил его работать).

В журналах кажется, что TeamCity создает здесь файл Program Files\TeamCity\buildAgent\temp\agentTmp, но for cmd выполняется и умирает слишком рано, чтобы увидеть, что он написал, предположительно, если бы первая строка была длинной задачей, вы могли бы проверить (досадно, «пауза» не сработала).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...