Как определить переменную MS-DOS? - PullRequest
73 голосов
/ 28 августа 2011

Допустим, я выполняю в оболочке CMD следующее:

set FOO=bar

Есть ли способ отменить определение этой переменной, кроме перезапуска оболочки CMD?

Ответы [ 5 ]

114 голосов
/ 28 августа 2011

Да, вы можете сбросить его с помощью

set FOO=

Или явно используя:

set "FOO="

Убедитесь, что после знака = никакие посторонние (невидимые) символы не следуют. То есть:

  • set FOO= отличается от set FOO= .
26 голосов
/ 28 августа 2011

Безопасный способ снять переменную - использовать также кавычки, тогда нет проблем с конечными пробелами.

set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
9 голосов
/ 29 августа 2011

другой метод

@Echo oFF

setlocal
set FOO=bar
echo %FOO%
endlocal

echo %FOO%

pause

Примечание. Это не будет работать в интерактивной командной строке.Но работает в пакетном режиме.

7 голосов
/ 28 августа 2011

Это работает для меня в моей оболочке Windows 7 CMD:

set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
3 голосов
/ 01 декабря 2016

Я бы предложил следующее только в качестве комментария, но я думаю, что это достаточно важно, чтобы стоять самостоятельно.

Во многих предыдущих ответах упоминалось, что нужно остерегаться конечных пробелов;и наверняка это правда.Однако я обнаружил, что иногда конечные пробелы просто хотят попасть туда, несмотря ни на что - особенно если вы делаете однострочную командную строку и вам нужен пробел в качестве разделителя команд.

Это решениеэта проблема:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...