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

Hoo*_*oob 3 batch-file visual-studio-2010 command-line-arguments post-build-event

有人知道怎么做吗?

我有一个.bat脚本,我希望能够在命令行中使用它,以及在Visual Studio中使用后构建脚本.

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

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

我尝试过看起来像命令行的一百种不同的封闭引号和转义字符组合,包括:

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

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

cmd /c ""$(SolutionDir)myScript.bat" "$(SolutionDir)" "$(Platform)" "$(Configuration)""
Run Code Online (Sandbox Code Playgroud)

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

"[path-to-script] is not recognized as an internal
or external command, operable program or batch file"
Run Code Online (Sandbox Code Playgroud)

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

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

Hoo*_*oob 6

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

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

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

if "%1"=="" goto usage
Run Code Online (Sandbox Code Playgroud)

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

"$(SolutionDir)myScript.bat" "$(SolutionDir)"
Run Code Online (Sandbox Code Playgroud)

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

if "%~1"=="" goto usage
Run Code Online (Sandbox Code Playgroud)

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