Переменные в пакетных файлах могут быть
- Определено: есть значение, которое хранится и связано имя, используемое для получения значения, то есть, имя переменной.
- Undefined: нет никакой ценности, и в этом случае нет необходимости в ассоциированном имени, поэтому его не существует.
Эти два простых правила описывают, как обновляется блок среды (где хранятся переменные/значение). Если есть значение, блок среды имеет запись для значения и имя для его получения. Без значения блок среды не создает запись или, когда переменная не указана, запись удаляется.
Так что, если
- никогда не определяются переменный не любая запись в среде блока
- переменной с не значение не имеет никакой записи в блоке среды
нет любая разница между этими двумя случаями.
примечание: В то время как традиционный способ проверить, если переменная хранит значение/переменная существует является (, как dbenham прокомментировал, что этот синтаксис не рекомендуется ставить в кавычки внутри значения приводят переменную к синтаксису проблемы)
if "%varName%"=="" ....
, если расширения командного процессора разрешены (и конфигурация по умолчанию, чтобы они включены) вы также можете использовать более безопасный альтернативный
if not defined varName ....
if defined varName ....
обратите внимание, что в этом синтаксисе, так как мы не пытаемся прочитать значение переменной, используется varName
, не %varName%
Там нет никакого способа определить переменную с пустой строкой в пакетном режиме. 'set" var = "' command _deletes_ переменная. – Aacini
@Aacini можно [установить переменную в null] (https://en.wikipedia.org/wiki/Batch_file#Null_values_in_variables). Вот почему вам нужны кавычки или какой-либо другой текст при сравнении в 'if', иначе' if% var% == text' может выйти из строя, если '% var%' ничего не содержит. [Как установить/использовать пустое строковое значение в переменной] (http://superuser.com/q/689847/241386) –
@ LưuVĩnhPhúc: Связанная статья Википедии не ясна. Как я уже говорил, ** нет способа определить переменную с пустой строкой в Batch **. Я приглашаю вас проверить эту команду: 'if defined var echo Value ="% var% "' и сообщить, когда вы получите этот результат: 'Value =" "' – Aacini