カスタムコマンドラインスクリプトを実行するTeamCityビルドプロセスを設定しようとしています。スクリプトは変数を使用するため、パーセント記号が必要です(例:%x
)。ただし、TeamCityは、プロパティにパーセント記号を使用します(例:%build.number%
)、スクリプトのパーセント記号は実行時に削除されます。
スクリプトにこれが含まれている場合:
for /d %x in ("c:\*") do @echo "%x"
これが実際に実行されるものです。
for /d x in ("\*") do @echo "x"
変数を含めることができるようにスクリプトを作成するにはどうすればよいですか?
for /d %%x in ("c:\*") do @echo "%%x"
を試してください(つまり、%記号を複製します)。
しかし、ファイルをそのままにしておくようにTCに指示する方法があるはずです。 TCがソースのパーセント記号を削除するのは恐ろしいことです。したがって、%
の置換を有効にするために、構成で何かを行ったと確信しています。
同様に、スクリプトを台無しにするのは本当にTCですか?または、ビルドツールを使用してスクリプトなどを生成していますか?
%をTeamCityに渡したい場合は、他の%と一緒にエスケープする必要があります。つまり、%の場合は%%である必要があります。
ただし、Windowsコマンドラインは%をエスケープ文字と見なすため、各%の前に別の%を追加して再度エスケープする必要があります。つまり、%%の場合は%%%%を渡す必要があります。
フローは次のとおりです。
%%%% in cmd -> %% in TeamCity -> % actual sign.
tl; dr:あなたの質問への答えは次のようになります:
for /d %%%%x in ("c:\*") do @echo "%%%%x"
TeamCityは、入力した内容をa .cmd
ファイルに貼り付けるだけのようです。これらの場合、for
ステートメントには2倍のパーセントが必要です。次に、TeamCityがこれらの%
記号のいずれかを削除したようです。したがって、tspauldがそれを機能させたのはなぜですか(これは私がそれを実行した方法でもあります)。
ログでは、TeamCityがここにファイルを作成しているようですProgram Files\TeamCity\buildAgent\temp\agentTmp
しかし、for cmdが実行されてすぐに終了し、書き込み内容を確認できません。おそらく、最初の行が長時間実行されているタスクの場合は、これを確認できます(迷惑な「一時停止」は機能しませんでした)。