在批处理中, 很多时候可能需要判断某变量是否定义。 而普通的变量和特定的隐藏变量的判断方法又有些不一样。 故总结如下:
1      对普通的变量来讲,只要判断其值是否为空即可:
      IF "%MyVar%"=="" ECHO MyVar is NOT defined.
      如果变量有双引号("), 则变通一下即可:
      IF [%MyVar%]==[] ECHO MyVar is NOT defined.

2      如果command 扩展开关打开时,可以使用 defined 命令来判断变量是否存在。
      如:
            
IF DEFINED MyVar (ECHO MyVar IS defined) ELSE (ECHO MyVar is NOT defined)

3      扩展开关关闭时,最安全的判断方式:
      如:
            
VERIFY OTHER 2>nul
            
SETLOCAL ENABLEEXTENSIONS
            IF ERRORLEVEL 1 ECHO Unable to enable extentsions
            
IF DEFINED MyVar (ECHO MyVar is defined) ELSE (ECHO MyVar is NOT defined)
            
ENDLOCAL

4      对于 hidden 或者 动态的变量如何判断呢?
      如下code 可以测试:

Date
      其输出结果将是:
C:\>IF DEFINED Date (ECHO Date IS defined )  ELSE (ECHO Date is NOT defined )
Date IS defined
C:\>ECHO Date = 06/06/2008
Date = 06/06/2008
C:\>SET Date
Environment variable Date not defined
C:\>PAUSE
Press any key to continue . . .
C:\>SET Date=Some Other Value
C:\>IF DEFINED Date (ECHO Date IS defined )  ELSE (ECHO Date is NOT defined )
Date IS defined
C:\>ECHO Date = Some Other Value
Date = Some Other Value
C:\>SET Date
Date=Some Other Value
C:\>PAUSE
Press any key to continue . . .
C:\>SET Date=
C:\>IF DEFINED Date (ECHO Date IS defined )  ELSE (ECHO Date is NOT defined )
Date IS defined


C:\>ECHO Date = 06/06/2008 Date = 06/06/2008 C:\>SET Date Environment variable Date not defined

如是,在此只能使用如下的判断方法:
SET Date >NUL 2>&1
IF ERRORLEVEL 1 (
ECHO Date still has its dynamic system value
) ELSE (
ECHO Date has been set with a static value
)

相关文章: