Visual Studio中生成后事件调用批处理文件与有空格的参数(Visual Studio Po

2019-09-23 16:00发布

任何人都知道如何做到这一点?

我有一个蝙蝠剧本,我希望能够通过命令行以及在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)""

但他们都产生错误,我无法找到这样的作品,而不是通常收到此错误的组合:

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

什么是正确的语法从生成后步骤调用此?

我有类似的问题,将其设置为外部工具一样,所以无论用任何帮助是极大的赞赏!

Answer 1:

随着得益于指着我的方向是正确的意见pilotcam和詹姆斯·K,我是有这个问题,互操作性是一个相对简单的批处理脚本,我试图从VS2010调用。

当从命令行调用时,我总是传递,并不需要封闭报价相对路径。 当从VS2010调用,我是基于VS扩张的$(SolutionDir)等宏与封闭引号指定完整路径。

当批处理脚本处理这些参数,它不写入账户的事实引号字符可能存在的参数的一部分。 所以,它做的第一件事是检查是否像这样空参数:

if "%1"=="" goto usage

这第一行是从VS像这样调用时发生了什么哽咽道:

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

... if语句窒息,因为都拿到熟成的%1的值封闭的报价。 适当的修正,这对于工作在有周围参数没有包围报价,以及从当存在两个VS2010命令行的用法,是剥去引号出的%1像这样:

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

...和它的其余部分固定这件事以后工作就好了。 也许批量脚本101,这样你就可以告诉我怎么经常写Windows批处理脚本。



文章来源: Visual Studio Post-Build events calling batch files with arguments that have spaces