基本的に、ソースディレクトリ(およびサブディレクトリ)の内容をコピーし、構造をターゲットディレクトリにフラット化して、重複を上書きするコマンドがあります。
これは、コマンドラインから機能する生のコマンドです
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 "%f" $(TargetDir) /y]"/>
<Exec Command="for /r $(SourceDir) %f in (*) do @copy "%f" $(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)