Visual Studio Post-Build事件调用具有空格的参数的批处理文件

时间:2012-10-06 23:40:41

标签: visual-studio-2010 batch-file command-line-arguments post-build-event

有人知道怎么做吗?

我有一个.bat脚本,我希望能够在命令行中使用它们以及在Visual Studio中使用post-build脚本。

脚本接受参数,其中一些参数可以包含空格。

.bat脚本的路径可以包含空格,最好表示为相对于$(SolutionDir)的路径。

我尝试过使用不同的封闭引号和转义字符组合的命令行的一百种变体,包括:

"$(SolutionDir)myScript.bat" "$(SolutionDir)\" "$(Platform)" "$(Configuration)"

call "$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)"

cmd /c ""$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)""

但它们都会产生错误,我找不到有效的组合,而是通常会收到此错误:

"[path-to-script] is not recognized as an internal
or external command, operable program or batch file"

从构建后的步骤中调用此方法的正确语法是什么?

我也有类似的问题将它设置为外部工具,所以非常感谢任何帮助!

1 个答案:

答案 0 :(得分:6)

感谢pilotcam和James K在评论中指出了我正确的方向,我在试图从VS2010调用的批处理脚本中遇到的互操作问题相对简单。

从命令行调用时,我总是传递不需要括号的相对路径。从VS2010调用时,我基于VS的扩展$(SolutionDir)和其他包含引号的宏来指定完整路径。

当批处理脚本处理这些参数时,由于引号字符可能作为参数的一部分存在,因此没有考虑到它。所以,它做的第一件事就是检查这样的空参数:

if "%1"=="" goto usage

这第一行是从VS调用时窒息的原因:

"$(SolutionDir)myScript.bat" "$(SolutionDir)"

... if语句因为包含的引号被扼杀而变得窒息,这些引号已被熟化为%1的值。正确的修复,当参数周围没有封闭引号以及VS2010时,对于命令行使用都是有用的,就是从%1中删除引号,如下所示:

if "%~1"=="" goto usage

......其余部分在解决之后工作得很好。可能是批处理脚本101,所以你可以告诉我多久写一次Windows批处理脚本。