在预构建事件中执行批处理文件时出现问题

我正在尝试在预构建事件期间执行批处理文件。 我有一个新项目,并添加了foo.bat 。 该文件包含以下行:

echo bar 

当我将预构建事件命令行设置为foo.bat时 ,我收到以下错误:

命令“foo.bat”退出代码9009。

当我将pre-build event命令行设置为调用foo.bat时 ,我收到以下错误:

命令“call foo.bat”退出代码1。

我读过的与这些代码相关的所有内容通常表示批处理文件的内容存在问题(在这种情况下不太可能)或系统无法找到批处理文件。

批处理文件从命令提示符正常工作。 我已经尝试过的事情:使用不同的工具,各种编码创建文件,在文件中放置出口0,对文件进行不同的构建操作,以及将文件复制到输出目录。 一切都没有运气。

我错过了什么? 它必须是简单的东西。

更新:是的 ,它很简单 – 路径的长度太长。 请参阅下面的答案了解详情

谢谢!

我得到了这个工作,我认为一张图片胜过千言万语,所以这里是完整的设置在一个屏幕截图。

在此处输入图像描述

你可能在PATH某个地方有另一个foo.bat 。 尝试指定批处理文件的完整路径,如C:\Path\to\foo.bat

在构建项目时,当前目录是具有.vcproj文件的目录。 如果命令路径不在PATH ,则应该相对于该目录指定命令路径。

尝试诊断问题的另一件事是在预构建事件命令中明确指定cmd ,如下所示:

 cmd /c C:\Path\to\foo.bat 

甚至

 C:\windows\system32\cmd.exe /c C:\Path\to\foo.bat 

看起来我的问题是批处理文件路径的长度。 由于这是概念certificate,我让VS在默认位置创建它:

C:\ Documents and Settings \ UserXXX \ My Documents \ Visual Studio 2010 \ Projects \ SolutionXXX \ ProjectXXX \ foo.bat

一旦我将解决方案移动到路径较短的位置,它就可以正常工作。 = P

谢谢你的建议!

1)通过View =>输出2看到错误详情。尝试调用“$(SolutionDir)\ xx \ xx.bat”

我通过从Windows资源管理器创建.bat文件,然后将其包含到我的项目中,而不是直接在VS 2010中创建,解决了这个问题。

预构建和后构建事件的当前工作目录是宏$(OutDir)指定的输出目录,而不是项目目录。

“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets”中的以下标记指定:

       

我怀疑的问题是你的文件夹路径中有一个SPACE字符。

所以这个命令可能适用于c:\development\projectABC\foo.bat但不适用于c:\development\project ABC\foo.bat

至少那对我来说是个问题,可能还有其他问题,但我怀疑这是最常见的问题。 解决方案:在批量调用周围加上引号:

 "c:\development\project ABC\foo.bat" 

右键单击项目 – >选择属性 – >选择构建事件选项卡然后清除预构建事件注释行。