Подтвердить что ты не робот

Использование знака процента в скриптах сборки TeamCity

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

Если script содержит следующее:

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

Это то, что он действительно запускает:

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Поток:

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

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

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

Ответ 3

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

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