MSBuild/cmd任务"此时出乎意料"

Fet*_*che 2 msbuild command-line batch-file

基本上我有一个命令,它将复制源目录(和子目录)的内容,并将结构展平到目标目录中,覆盖任何重复项.

这是从命令行工作的原始命令

for /r 5.1.0.60 %f in (*) do @copy "%f" "deployment" /y
Run Code Online (Sandbox Code Playgroud)

在这种情况下

  • "5.1.0.60"是先前TeamCity/MSBuild任务的输出目录
  • "deployment"是步骤的展平输出的目标目录

但是,当我从MSBuild任务内部运行此命令时(最终作为TeamCity构建的一部分),我收到以下错误

f" deployment /y was unexpected at this time
Run Code Online (Sandbox Code Playgroud)

我有以下基本的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>
Run Code Online (Sandbox Code Playgroud)

最终,如果过去的话

for /r 5.1.0.60 %f in (*) do @copy "%f" "deployment" /y
Run Code Online (Sandbox Code Playgroud)

进入一个批处理文件并自行运行批处理文件(在msbuild之外)我得到了同样的错误,所以大概是一个cmd问题而不是MSBuild,不过因为我想这是MSBuild/TeamCity中的一个常见任务我已经也标记了那些.

任何帮助或指针将非常感激.(NB windows 7 pro,TeamCity 6.5)

dbe*_*ham 5

FOR变量在命令行上使用时使用单个百分比(%f),但在批处理文件中使用时需要两个百分比(%% f).

我不确定TeamCity是在命令行上下文中还是在临时批处理文件中执行命令.