visual-studio-2010 - Visual Studio Post-Build 事件调用带有空格的参数的批处理文件

标签 visual-studio-2010 batch-file 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)""

但是它们都会产生错误,我找不到有效的组合,而是通常会收到此错误:
"[path-to-script] is not recognized as an internal
or external command, operable program or batch file"

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

我在将其设置为外部工具时也遇到了类似的问题,因此非常感谢您提供任何帮助!

最佳答案

感谢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 批处理脚本的频率。

关于visual-studio-2010 - Visual Studio Post-Build 事件调用带有空格的参数的批处理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764847/

相关文章:

c# - 如何强制 Asp.net 开发服务器作为 32 位进程运行?

c++ - OpenCV 程序无法在 Visual Studio 2010 上编译

c# - UBound 数组 vb6 转换为 C#

windows - 批处理文件 - 将日期时间格式从 YYYY/MM/DD 转换为 YYYY-MM-DD

c - 将 argv[] 传递给 CreateProcess() 的方法

python - 有没有办法在 argparse 中添加一个已经创建的解析器作为子解析器?

c++ - 在CHtmlEditCtrl中绘制 "red squiggly line"

windows - "start"命令在子进程中不继承句柄如何使用?

variables - 批量检查变量是否为负数

linux - 为命令行快速开发 GUI