1
我正在嘗試編寫批處理文件來查找程序的安裝目錄。當檢查變量是否定義時批處理文件中斷
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
聲明會破壞我的批處理文件?
括號'('和')'導致內部他們的一切馬上進行評估,因此在設置之前正在對「InstallDir」進行評估。搜索「延遲評估」查看一個解決方案,或者使用goto而不是括號。 –