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)
从后构建步骤调用此方法的正确语法是什么?
我也有类似的问题将它设置为外部工具,因此非常感谢任何帮助!
感谢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批处理脚本.
| 归档时间: |
|
| 查看次数: |
8313 次 |
| 最近记录: |