我正在尝试编写批处理文件来查找程序的安装目录。
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
语句会破坏我的批处理文件?
答案 0 :(得分:1)
尝试启用延迟扩展,将setlocal enabledelayedexpansion
放在第一行,然后使用感叹号来验证其是否已定义:
if not defined InstallDir (
CALL:get_vsinstalldir InstallDir
echo InstallDir="!InstallDir!"
)