2015-10-14 106 views
1

下面给出的代码是vcvarsall.bat文件的摘录,用于为设置Visual C++命令行的环境变量 。 由于错误(在代码中提及REM语句),因此未设置环境变量。CALL空格和括号中的路径

: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

编辑:

我已经把测试echo声明,其中被称为VCVARS32.BAT文件的开头。如果文件已经运行,则应该使用屏幕上显示的语句执行该语句。此外,我确定程序流程是通过标记为:x86的块,因为放在那里的测试回声语句是运行的。

编辑2: 以下保罗&合作的建议后,改变了正常set命令扩展语法,用引号。 在运行VCVARS32.BAT执行停止在下面的行:

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

所示的错误是:

\Microsoft was unexpected at this time. 
+0

其实我在这里看不到任何错误,你的代码看起来不错,因为在包含空格和'()'的路径周围有引号;所以你绝对相信这个错误是由你怀疑的那一行引发的? – aschipfl

+2

看来你的问题不是对'vcvars32.bat'的调用,而是调用文件中的代码。 –

+0

@MCND:谢谢你的提示,让我检查一下 – sjsam

回答

1

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

我加

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

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

基本上,我只剥去PATH变量的报价。

(对他的宝贵建议感谢@jeb)。

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" 

我在if exist "%~dp0bin\nul"加入\nul文件和文件夹之间进行区分。

+0

:谢谢,但是。我已经尝试过集合的扩展语法 – sjsam

+0

缺少的标签实际上出现在代码中,为简洁起见,这里未包括。 – sjsam

+0

我猜标签不是这里的问题。标签':missing'实际上出现在这个发货文件的末尾。'call'%〜dp0bin \ vcvars32.bat“'是引发错误的行'上面的行给出'C:\ Program'不是recognized'。我已经尝试了你的工作方式。有没有办法解决通话声明? – sjsam