Допустим, я выполняю в оболочке CMD следующее:
set FOO=bar
Есть ли способ отменить определение этой переменной, кроме повторного использования оболочки CMD?
Допустим, я выполняю в оболочке CMD следующее:
set FOO=bar
Есть ли способ отменить определение этой переменной, кроме повторного использования оболочки CMD?
set var=
ответ работает под MS-DOS 6.22 command.com точно так же, как и под Windows cmd.exe. (Однако, в отличие от Windows, двойные кавычки вокруг var = не работают, вместо этого создается переменная среды, имя которой начинается с двойной кавычки.)
Ответы:
Да, вы можете отключить его с помощью
set FOO=
Или явно используя:
set "FOO="
Убедитесь, что после =
знака не идут посторонние (невидимые) символы . То есть:
set FOO=
отличается от set FOO=
.Это работает для меня в моей оболочке CMD Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
команде важны пробелы . Если вы попробуете, set FOO = bar
а потом попробуете set FOO=
, он не сбросит "FOO". Но почему-то внутри они (как?) Не значимы % %
.
Я бы предложил следующее только в качестве комментария, но я думаю, что это достаточно важно, чтобы стоять отдельно.
Во многих предыдущих ответах упоминалось, что нужно остерегаться конечных пробелов; и это точно правда. Однако я обнаружил, что иногда конечные пробелы просто хотят попасть туда, несмотря ни на что - особенно если вы используете однострочную командную строку и нуждаетесь в пробеле в качестве разделителя команд.
Это решение этой проблемы:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
Заключив объявление таким образом в двойные кавычки, можно полностью избежать проблемы с интервалом. Это также может быть полезно, когда переменные создаются путем объединения, чтобы исключить пробелы между путями, например:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
) ??