Как определить переменную MS-DOS?

Допустим, я выполнил следующее в оболочке 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 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