command-line - MSBuild/cmd 任务 "was unexpected at this time"

标签 command-line msbuild batch-file

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

这是从命令行运行的原始命令

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

在这种情况下

  • “5.1.0.60”是先前 TeamCity/MSBuild 任务的输出目录
  • “deployment”是步骤扁平化输出的目标目录

但是,当我从 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 之外)我得到了相同的错误,所以大概这完全是一个 cmd 问题而不是 MSBuild,不过因为我认为这是 MSBuild/TeamCity 中的常见任务我也标记了这些。

任何帮助或指示将不胜感激。 (注意 Windows 7 Pro、TeamCity 6.5)

最佳答案

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

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

关于command-line - MSBuild/cmd 任务 "was unexpected at this time",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11473989/

相关文章:

c - 程序在打印字符数组后总是缩进?

wpf - 为什么在使用 MSBuild 4.0 编译 .NET3.5 项目时出现 BadImageFormatException

c# - 在构建事件中所做的更改不会在 clickonce 发布时持续存在

windows - 从批处理文件启动时,Visual Studio 2017 命令行工具不起作用

php - 如何使用 exec() PHP 发送变量

r - 脚本如何在从命令行运行的 R 中找到自己?

javascript - Bower 安装库问题

visual-studio-2010 - 是否可以根据构建架构将 Nuget 绑定(bind)到两个不同的包

mysql - 使用批处理脚本获取目录中的文件名

batch-file - 剥离驱动器号