代码之家  ›  专栏  ›  技术社区  ›  kdmurray

VS2008生成后事件批处理文件

  •  2
  • kdmurray  · 技术社区  · 14 年前

    我正在尝试执行一个批处理文件,以便在生成后移动一堆文件,因此我创建了一个生成后事件,如下所示:

    $(ProjectDir)CopyPlugins.bat $(ConfigurationName)
    

    问题是,当visualstudio尝试运行事件时,我得到的错误是进程 exited with code 9009

    问题似乎是VS将整行置于引号中,因此它运行的命令是:

    "C:\Users\kdmurray\Visual Studio 2008\Projects\Runner\Runner\CopyPlugins.bat Debug"
    

    当然,我打算做的是一个非常微妙的变化,改变收盘引号的位置。

    "C:\Users\kdmurray\Visual Studio 2008\Projects\Runner\Runner\CopyPlugins.bat" Debug
    

    有没有什么方法可以绕过VS提供的这个相当烦人的“帮助”?

    4 回复  |  直到 14 年前
        1
  •  6
  •   Jesper Palm    14 年前

    再创建两个批处理文件,只使用不同的参数执行第一个批处理文件。

    复制插件-调试.bat Call CopyPlugins.bat debug

    Call CopyPlugins.bat release

    在VS生成后事件中 "$(ProjectDir)CopyPlugins-$(ConfigurationName).bat"

        2
  •  0
  •   Matthew Olenik    14 年前

    如果您正试图进行复杂的后期生成复制,那么可能值得一看 MSBuild Community Tasks 项目。它有一项任务RoboCopy.exe这可能是一个更干净的方式来完成你的任务。

    通常,我会创建一个单独的“构建”项目,它是空的,只执行构建前/构建后的步骤。它工作得很好。

        3
  •  0
  •   Chris Schmich    14 年前

    我认为您可能只需要在批处理脚本的路径周围加引号,即,您的后期生成事件应该是:

    "$(ProjectDir)CopyPlugins.bat" $(ConfigurationName)
    

    对于一个位于路径中有空格的目录中的C#项目,这对我来说是有效的。

        4
  •  0
  •   Deamonpog    12 年前

    就这样打吧

    d:\foo\bar\myMainScript.bat "$(MY_VSPROPS_MACRO_VAR_00)"
    

    这对我有用。不要使用 CALL 函数调用批处理文件!!!。

    将所有参数传递到主批处理文件中并在其中进行处理。 如果要调用其他批处理或批处理集,则不要在生成后事件中调用它们,只需从主批处理文件中调用其他批处理文件即可。