Скажем, я выполняю следующее в оболочке CMD:
set FOO=bar
Есть ли способ определить эту переменную, кроме утилизации оболочки CMD?
Скажем, я выполняю следующее в оболочке CMD:
set FOO=bar
Есть ли способ определить эту переменную, кроме утилизации оболочки CMD?
Да, вы можете отключить его с помощью
set FOO=
Важное примечание. Убедитесь, что после символа = нет конечных пробелов/других невидимых символов. set FOO=
!= set FOO=
Безопасный способ отключения переменной - использовать также кавычки, тогда нет проблем с конечными пробелами.
set FOO=bar
echo %FOO%
set "FOO=" text after the last quote is ignored
echo %FOO%
Это работает для меня в моей оболочке CMD Windows 7:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
другой метод
@Echo oFF
setlocal
set FOO=bar
echo %FOO%
endlocal
echo %FOO%
pause
Примечание. Это не будет работать в интерактивной командной строке. Но работает в пакетном режиме script.
Я бы предложил следующее только в качестве комментария, но я думаю, что это достаточно важно, чтобы стоять самостоятельно.
Многие предыдущие ответы упомянули, что нужно остерегаться отстающих пространств; и это точно. Однако я обнаружил, что иногда конечные пробелы просто хотят попасть туда независимо от того, что особенно важно, если вы выполняете однострочный интерфейс командной строки и нуждаетесь в пространстве в качестве разделителя команд.
Это решение этой проблемы:
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