2

基本的に、ソースディレクトリ(およびサブディレクトリ)の内容をコピーし、構造をターゲットディレクトリにフラット化して、重複を上書きするコマンドがあります。

これは、コマンドラインから機能する生のコマンドです

for /r 5.1.0.60 %f in (*) do @copy "%f" "deployment" /y

この場合、

  • 「5.1.0.60」は、前のTeamCity/MSBuildタスクの出力ディレクトリです。
  • 「デプロイメント」は、ステップのフラット化された出力のターゲットディレクトリです

ただし、このコマンドをMSBuildタスク内から(最終的にはTeamCityビルドの一部として)実行すると、次のエラーが発生します。

f" deployment /y was unexpected at this time

この問題を示す次の基本的なmsbuildスクリプトがあります。

<Project DefaultTargets="flatten"
        xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
        ToolsVersion="3.5">
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />

  <PropertyGroup>
    <SourceDir>5.1.0.60</SourceDir>
    <TargetDir>deployment</TargetDir>
  </PropertyGroup>

  <Target Name="flatten">
    <!-- create our deployment directory -->
    <MakeDir Directories="$(TargetDir)"/>

    <!-- Copy all files flattenend to the deployment directory-->
    <Message Text="##Command  [for /r $(SourceDir) %f in (*) do @copy &quot;%f&quot; $(TargetDir) /y]"/>
    <Exec Command="for /r $(SourceDir) %f in (*) do @copy &quot;%f&quot; $(TargetDir) /y" />

  </Target>    
</Project>

最終的に、ラインを超えた場合

for /r 5.1.0.60 %f in (*) do @copy "%f" "deployment" /y

バッチファイルに入れて、バッチファイルを単独で(msbuildの外で)実行すると、同じエラーが発生します。おそらく、これはMSBuildではなく厳密にcmdの問題ですが、これはMSBuild/TeamCityで一般的なタスクだと思います。それらにもタグを付けました。

ヘルプやポインタをいただければ幸いです。(NB Windows 7 Pro、TeamCity 6.5)

4

1 に答える 1

5

FOR変数は、コマンドラインで使用する場合は1パーセント(%f)を使用しますが、バッチファイルで使用する場合は2パーセント(%% f)が必要です。

TeamCityがコマンドラインコンテキストでコマンドを実行するのか、一時バッチファイル内からコマンドを実行するのかわかりません。

于 2012-07-13T17:13:02.513 に答える