Допустим, я выполняю следующее в оболочке CMD:
SET "FOO=bar"
Есть ли способ отменить определение этой переменной, кроме повторного использования оболочки CMD?
Допустим, я выполняю следующее в оболочке CMD:
SET "FOO=bar"
Есть ли способ отменить определение этой переменной, кроме повторного использования оболочки CMD?
Да, вы можете отключить его с помощью
set FOO=
Или явно используя:
set "FOO="
Убедитесь, что после знака =
не идут посторонние (невидимые) символы. То есть:
set FOO=
отличается от set FOO=
.Безопасный способ сбросить переменную — использовать также кавычки, тогда не будет проблем с конечными пробелами.
set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
другой метод
@Echo oFF
setlocal
set FOO=bar
echo %FOO%
endlocal
echo %FOO%
pause
Примечание. Это не будет работать в интерактивной командной строке. Но работает в пакетном сценарии.
Это работает для меня в моей оболочке Windows 7 CMD:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
важны пробелы. Если вы попробуете set FOO = bar
, а затем set FOO=
, это не удалит 'FOO'. Однако по какой-то причине они не (насколько?) значимы внутри % %
.
- person Ted Hopp; 28.08.2011
Я бы предложил следующее только в качестве комментария, но я думаю, что это достаточно важно, чтобы стоять отдельно.
Во многих предыдущих ответах упоминалось, что нужно остерегаться конечных пробелов; и наверняка это правда. Однако я обнаружил, что иногда конечные пробелы просто хотят попасть туда, несмотря ни на что, особенно если вы выполняете однострочную командную строку и нуждаетесь в пробеле в качестве разделителя команд.
Это решение этой проблемы:
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
) ?? - person marc_s   schedule 28.08.2011set var=
работает в MS-DOS 6.22 command.com точно так же, как и в Windows cmd.exe. (Однако, в отличие от Windows, заключение var= в двойные кавычки не работает, вместо этого создается переменная среды, имя которой начинается с двойной кавычки.) - person Simon Kissane   schedule 13.07.2016