检查是否定义了变量时,批处理文件会中断

时间:2014-03-06 22:37:14

标签: windows batch-file

我正在尝试编写批处理文件来查找程序的安装目录。

CALL:get_vsinstalldir InstallDir
echo InstallDir="%InstallDir%"

EXIT /B 0

@REM get the location of the visual studio 2012 installation
:get_vsinstalldir
FOR /F "tokens=2*" %%A IN ('REG.EXE QUERY "HKCU\Software\Microsoft\VisualStudio\11.0_Config" /V "ShellFolder" 2^>NUL ^| FIND "REG_SZ"') DO SET %~1=%%B
EXIT /B 0

这样可以正常工作并输出类似InstallDir="C:\path to VS\blah"

的内容

但是,如果我检查InstallDir是否已经定义如下:

if not defined InstallDir (
    CALL:get_vsinstalldir InstallDir
    echo InstallDir="%InstallDir%"
)

然后,它会打印InstallDir=""

为什么if not defined语句会破坏我的批处理文件?

1 个答案:

答案 0 :(得分:1)

尝试启用延迟扩展,将setlocal enabledelayedexpansion放在第一行,然后使用感叹号来验证其是否已定义:

    if not defined InstallDir (
     CALL:get_vsinstalldir InstallDir
     echo InstallDir="!InstallDir!"
    )