有人知道怎么做吗?
我有一个 .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/