2010-12-08 5 views
30

カスタムコマンドラインスクリプトを実行するTeamCityビルドプロセスを設定しようとしています。スクリプトは変数を使用するため、パーセント記号(たとえば、%x)が必要です。しかし、TeamCityはプロパティのパーセント記号(例:%build.number%)を使用しているため、スクリプトのパーセント記号は実行時に削除されます。TeamCityビルドスクリプトでパーセント記号を使用する

スクリプトはこのが含まれている場合:

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

これは、それが実際に実行されるものです:それは変数を含めることができるように

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

は、どのように私は自分のスクリプトを書くことができますか?

+0

チームシティー。あなたはパーセンテージを拾っているTCだと確信していますか? –

+1

私は別のファイルの代わりにカスタムスクリプトを使用しようとしていました。それをファイルに移動すると助けになりました。 – tspauld

答えて

28

Try for /d %%x in ("c:\*") do @echo "%%x"(つまり、%記号を複製)。

しかし、TCにファイルを残しておくように指示する方法があるはずです。 TCが出所のパーセント記号を削除するのは恐ろしいことだろう。したがって、%の交換を可能にする設定で何かをやったと確信しています。

同様の注記では、実際にはTCがスクリプトを乱しているのでしょうか?あるいは、ビルドツールを使ってスクリプトなどを生成していますか?

+0

私はもともと別のファイルではなくカスタムスクリプトを使用しようとしていましたが、そのように重複したパーセント記号を試しましたが、動作しませんでした。別のファイルでそれらを使用しても動作します。 – tspauld

+6

また、パーセント記号を3倍にすることでカスタムスクリプトとして機能させることもできました。 – tspauld

+0

あなたのスクリプトが壊れる理由はまだあります。どのプログラムが '%build.number% 'を展開していますか?それは本当にTCですか?もしそうなら、それをオフにするオプションが必要です。ビルド番号が必要な場合は、それを別のスクリプトに入れ、 'call'を読むことをお勧めします。 –

3

TeamCityは、あなたが入力した内容を単純にスティックしているようです。a .cmdファイル forステートメントでは、これらの場合に2倍の割合が必要です。 それはTeamCityがこれらの%の兆候の1つを取り除いたように見えます。なぜtspauldがうまく動作するのですか(これは私が走らせる方法です)。

TeamCityがここにファイルProgram Files\TeamCity\buildAgent\temp\agentTmpを作成すると思われますが、for cmdが実行されてすぐに書き込まれています。最初の行が長い実行タスクだった場合は、これをチェックすることができますannoyingly 'pause'はうまくいきませんでした)。

50

%をTeamCityに渡す場合は、他の%とエスケープする必要があります。つまり、%は%%でなければなりません。あなたがそれぞれ%の前に別の%を追加し、再びそれをエスケープする必要がありますので

が、Windowsのコマンドラインを使用すると、合格しなければならないすなわち%%のために、エスケープ文字として%を考慮し%%%%

フローは次のとおりです。

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

TL; DR:あなたの質問に答えは次のようになります。それは、エージェントマシン上で実行されたファイルには触れていません

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

こんにちはマラット、あなたの答えは私がコマンドラインビルドステップで%をエスケープするのに役立ちました。しかし、私はまだ%%が看板から脱出するはずであるときに、なぜ4%の看板を渡す必要があるのか​​理解できません。これを説明する文書へのリンクはありますか? – Newbee

+1

@Newbee 2層のエスケープがあります。最初はTeamCity、2番目はコマンドラインです。したがって、%%%%をTeamCityに渡すと、それを%%として解釈し、コマンドラインに渡します。コマンドラインは%%を受け取り、%として解釈します。 – Aura

+0

あなたの答えをありがとう! – QtRoS

関連する問題