首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual Studio生成后事件调用带有空格参数的批处理文件

Visual Studio生成后事件调用带有空格参数的批处理文件
EN

Stack Overflow用户
提问于 2012-10-07 07:40:41
回答 1查看 9.1K关注 0票数 4

有人知道怎么做吗?

我有一个.bat脚本,我希望它既可以从命令行使用,也可以在Visual Studio中使用构建后脚本。

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

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

我尝试了似乎有上百种不同的命令行变体,带有不同的括起来的引号和转义字符组合,包括:

代码语言:javascript
复制
"$(SolutionDir)myScript.bat" "$(SolutionDir)\" "$(Platform)" "$(Configuration)"

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

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

但是它们都会产生错误,我找不到一个可以工作的组合,而通常会得到这个错误:

代码语言:javascript
复制
"[path-to-script] is not recognized as an internal
or external command, operable program or batch file"

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

我在将它设置为外部工具时也遇到了类似的问题,所以任何对这两个工具的帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2012-10-07 09:55:16

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

当从命令行调用时,我总是传入不需要用引号括起来的相对路径。当从VS2010调用时,我根据VS的$(SolutionDir)展开和其他带有引号的宏来指定完整路径。

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

代码语言:javascript
复制
if "%1"=="" goto usage

当像这样从VS调用时,这第一行是令人窒息的:

代码语言:javascript
复制
"$(SolutionDir)myScript.bat" "$(SolutionDir)"

由于在%1的值中包含引号,...the if语句被阻塞。正确的修复方法是将%1中的引号去掉,如下所示。该修复方法既适用于命令行的用法,也适用于命令行的用法。

代码语言:javascript
复制
if "%~1"=="" goto usage

...and在修复它之后,它的其余部分都工作得很好。可能是批处理脚本101,所以你可以知道我写一次windows批处理脚本的频率。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12764847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档