Переменная окружения не может иметь пустую строку. Переменная окружения вообще не определяется при присвоении переменной окружения ничего.
Справка команды IF , выводимая при запуске в окне командной строки, объясняет синтаксис:
if defined Variable ...
if not defined Variable ...
Это работает, если расширения команд включены по умолчанию при запуске cmd.exe
или запуске командного файла.
@echo off
SET "a="
SET "b=Hello"
if not defined a echo String A is empty.
if not defined b echo String B is empty.
Квадратные скобки не имеют значения для команды IF или для командного процессора Windows. Но двойные кавычки имеют одну, поскольку они определяют строку аргумента. Так что возможно также использовать:
@echo off
SET "a="
SET "b=Hello"
if "%a%" == "" echo String A is empty.
if "%b%" == "" echo String B is empty.
Но учтите, что символ двойной кавычки "
внутри строкового значения a
или b
с расширением процессором команд перед выполнением проанализированной командной строки, как это сделано здесь с %a%
и %b%
, приводит к синтаксическая ошибка командной строки.
Прочтите также ответ по Почему после использования команды 'set var = text' в командной строке не выводится строка с 'echo% var%'? Почему рекомендуется использовать синтаксис set "Variable=Value"
, чтобы избежать получение присвоенной переменной среды значения с не отображаемыми конечными пробелами.