在路径中使用空格和括号进行调用

时间:2015-10-14 05:00:09

标签: batch-file command-line cmd

下面给出的代码是vcvarsall.bat文件的摘录 为Visual C ++命令行设置环境变量。 由于错误(在代码中提到为REM语句),未设置环境变量。

:x86

if exist "%~dp0bin" echo "%~dp0bin exists" 

REM The above line gives "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin exists" as output.

if not exist "%~dp0bin\vcvars32.bat" goto missing

call "%~dp0bin\vcvars32.bat"

REM The above line gives 'C:\Program' is not recognized as an internal or external command as output.
goto :SetVisualStudioVersion

由于未设置环境变量,因此在构建nmake项目时遇到了运行时错误。

我已经完成了这个SO questionpost,但解决方法没有帮助。

有人可以建议在路径中使用空格和圆括号调用call的解决方法吗?

修改

我在正在调用的vcvars32.bat文件的开头放置了一个test echo语句。如果文件已运行,则应使用屏幕上打印的语句执行此语句。此外,我确信程序流是通过标记为:x86的块,因为放在那里的测试回显语句已经运行。

编辑2: 遵循Paul& amp; Co,将正常set命令更改为带引号的扩展语法。 在运行vcvars32.bat时,执行将在以下行停止:

@if not "%WindowsSDK_ExecutablePath_x86%" == "" (
    @set "PATH=%WindowsSDK_ExecutablePath_x86%;%PATH%"
)

显示的错误是:

\Microsoft was unexpected at this time.

2 个答案:

答案 0 :(得分:1)

在@Jeb的帮助下,我可以使用。来解决此错误 低于vcvars32.bat中的调整。

我添加了

@set PATHTEMP=%PATH%
@set PATH=%PATHTEMP:"=%

之前

@if not "%WindowsSDK_ExecutablePath_x86%" == "" (
    @set "PATH=%WindowsSDK_ExecutablePath_x86%;%PATH%"
)

基本上我只是从PATH变量中删除了引号。

(感谢@jeb提出宝贵的建议)。

答案 1 :(得分:0)

:x86
if exist "%~dp0bin\nul" (
    rem this IF statement is useless since you are going to check if vcvars32.bat exist 
    echo "%~dp0bin exists" 
)

set "_MVS=%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\bin"
if not exist "%_MVS%\vcvars32.bat" (
    echo "%_MVS%\vcvars32.bat" is missing
    echo please fix it and retry again.
    exit /b 0
)
call "%~dp0bin\vcvars32.bat"

我在\nul中添加了if exist "%~dp0bin\nul"来区分文件和文件夹。