2014-03-06 71 views
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聲明會破壞我的批處理文件?

+0

括號'('和')'導致內部他們的一切馬上進行評估,因此在設置之前正在對「InstallDir」進行評估。搜索「延遲評估」查看一個解決方案,或者使用goto而不是括號。 –

回答

1

嘗試啓用延遲擴展,把setlocal enabledelayedexpansion在第一線,然後用驚歎號來驗證它的定義或沒有:

if not defined InstallDir (
    CALL:get_vsinstalldir InstallDir 
    echo InstallDir="!InstallDir!" 
    ) 
相關問題