О значениях переменных: вы можете использовать большинство символов в качестве значений переменных, включая пробел. Если вы используете специальные символы <,>, |, & или ^, вы должны предшествовать им символом escape (^) или кавычками. Если вы используете кавычки, они включаются как часть значения, потому что все, что соответствует знаку равенства, принимается за значение.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true
Проверить раздел "Установка переменных окружения".
Об именах переменных: на мой взгляд, для лучшей совместимости с каждым приложением вы должны ограничивать себя буквами, цифрами, подчеркиванием (_) и минусом (-).
Я уверен, что все допустимые символы POSIX для файлов в порядке, но я не нашел никаких доказательств этого.
Что касается имен переменных имен мы должны также принять скобку, поскольку %ProgramFiles(x86)%
является хорошо известным envar. Из моих экспериментов кажется, что в дополнение к символам букв и цифр эти символы действительны _(){}[]$*+-\/"#',;[email protected]!?
, и эти символы не действительны %<>^&|=:
.
Я не делал исчерпывающий поиск, но проверял наиболее распространенные не буквенно-цифровые символы.
И просто для удовольствия вы можете назвать envar %_(){}[]$*+-\/"#',;[email protected]!?%
:
C:\>set _(){}[]$*+-\/"#',;[email protected]!?=xyz
C:\>echo %_(){}[]$*+-\/"#',;[email protected]!?%
xyz