Check if an environment variable is defined without command extensions and without using a batch file?

后端 未结 5 505
南笙
南笙 2020-12-25 10:54

I need to use a cmd.exe command line (cmd.exe is being called from the gyp build tool) to determine whether an environment variable is defined or not. How can I do this? I

相关标签:
5条回答
  • 2020-12-25 11:01

    OK, this took a bit, but I think I've figured it out. Try this:

    SET UNDEFINED 2>Nul | Findstr/I "."
    IF ERRORLEVEL 1  ECHO Not Defined.
    

    This works for all cases AFAIK, and does not rely on any command extension features.

    0 讨论(0)
  • 2020-12-25 11:12

    I tried this and it worked:

    @echo off
    
    setlocal disableextensions
    
    set x=%path%
    if "%x%"=="" (echo "PATH" does not exist) else (echo "PATH" exists)
    
    set x=%pathx%
    if "%x%"=="" (echo "PATHX" does not exist) else (echo "PATHX" exists)
    
    endlocal
    

    It returned:

    "PATH" exists
    "PATHX" does not exist
    
    0 讨论(0)
  • 2020-12-25 11:14

    If the extensions are really disabled (I can't believe this),
    then you can try different ways.

    IF %UNDEFINED% == %^UNDEFINED% (echo yes)
    

    This works as if undefined doesn't exists then it isn't replaced, also ^undefined but the caret will be removed in the next parser phase, so %undefined% is compared against %undefined%. The disadvantage are the missing quotes, as they also make the expression stable against special characters.

    A better way is to use IF defined, but when extensions are disabled you need to enable them first.

    cmd /E:on /c "if not defined undefined echo It's undefined"
    

    The best way is to simply use a batch file, that should also work with gyp build system.

    0 讨论(0)
  • 2020-12-25 11:14
    IF NOT %CODE%==? do stuff.
    

    This works on a W98 command line and in a batch file, so it ought to work anywhere from early MS-DOS onwards with no extensions needed. It assumes that CODE is usefully set or not set at all.

    It results in a syntax error if CODE does not exist, or does nothing if CODE is a question mark (chosen because it could never exist in a path). Either way, nothing is done. The NOT makes sure action is only taken if CODE appears to be set to something useful.

    I use it in compiler batch files to determine whether to use relative paths or use a fixed base directory if one is set in the CODE variable. It allows me to make a coding tree portable without having to modify all the batch files for each program if I move everything.

    0 讨论(0)
  • 2020-12-25 11:26

    Errr... just:

    if defined your-var-name ( 
        echo yarp
    ) else (
        echo narp
    )
    

    I should add, I do not believe this needs command extensions...

    0 讨论(0)
提交回复
热议问题